Springboot之maven依赖管理
Springboot之maven依赖管理
- maven依赖传递性与依赖冲突解决
- maven插件 Maven Helper
- 统一管理 dependencyManagement 标签
- import标签
- 手动声明
- 依赖排除
在我们日常开发中,一般中大型项目对依赖管理会比较高,最近重新梳理了一下相关的知识
maven依赖传递性与依赖冲突解决
- 最短路径优先
假设有以下三个模块:
Module A 依赖于 Library X 版本 1.0
Module B 依赖于 Library X 版本 2.0
Module C 同时依赖于 Module A 和 Module B
在这种情况下:
如果 Module C 直接依赖于 Module A 和 Module B,Maven 将选择 Library X 的哪个版本取决于最短路径优先原则。 - 最先声明者优先
如果有多个路径可以到达同一个依赖且路径长度相同,Maven 将选择最先声明的路径中的版本
maven插件 Maven Helper
这个idea的插件可以帮我们很方便的查看maven的依赖结构
统一管理 dependencyManagement 标签
当多个项目或模块需要共享相同的依赖项版本时,可以将这些依赖项的版本信息集中定义在一个单独的POM文件中,然后在其他项目的pom.xml中通过import导入这个POM文件。这样,当需要更新某个依赖项的版本时,只需在一个地方进行修改,而不需要在每个项目中都进行修改。
<dependencyManagement><dependencies><dependency><groupId>com.example</groupId><artifactId>dependencies-management</artifactId><version>1.0.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
import标签
我们导入时候一般都会生命这个标签,注意如果使用这个标签的话,所引入的POM里面的依赖会替换掉依赖,所以maven的依赖传递性不生效
手动声明
<dependency><groupId>com.example</groupId><artifactId>library-x</artifactId><version>2.0</version> <!-- 统一指定版本 --></dependency>
依赖排除
<dependency><groupId>com.example</groupId><artifactId>module-b</artifactId><version>1.0</version><exclusions><exclusion><groupId>com.example</groupId><artifactId>library-x</artifactId></exclusion></exclusions>
</dependency>