Maven依赖管理
学习地址:https://www.bilibili.com/video/BV1Ah411S7ZE?p=12&vd_source=fd479576740a013e7a8e2c54b5c901eb
1. Maven依赖冲突问题
- 路径优先的解释:如果log4j这个依赖一个出现在第2层级,一个出现在第4层级,第2层级的优先。
- 声明优先的解释:如果log4j这个依赖在被a这个1级依赖引用,属于2级依赖,同时也被b这个1级依赖引用,也属于2级依赖,那就看a和b这两个1级依赖谁的声明顺序靠前,前面的覆盖后面的。
- 特殊依赖的解释:如果不小心在一个层级中配置了log4j的两个不同版本,后面的覆盖前面的。
2. 可选依赖
如果不想让调用者看见自己引用了哪些依赖,optional标签设置成true就可以
3.排除依赖
exclusions标签代表排出的依赖的集合
exclusion代表排除的依赖的坐标(组织名、依赖名、版本),不用加版本号
Maven父子模块管理
1.标签作用
学习地址:https://blog.51cto.com/u_13423706/5818633
- module标签是声明子模块,如果项目有多个模块,需要一个个构建比较麻烦,通过在父模块中声明子模块,构建父模块就可以将所有的子模块构建。
- parent标签是声明该模块继承自哪个模块,可以得到父模块的所有依赖,不需要自己定义了,所以可以将所有子模块中用到的依赖,在父模块中引入。
- dependencyManagement标签用来统一管理依赖版本的,在这个标签下声明的依赖不会被子模块引入,但是子模块在声明依赖时,可以不写版本,直接继承父模块这个标签下的依赖的版本,降低依赖冲突的概率。
SpringCloud相关依赖全局版本控制
在父POM中的依赖管理标签中,添加spring-cloud-dependencies依赖,并通过properties配置依赖版本
<properties>
<java.version>17</java.version>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>