Maven传递依赖
1.背景
- 最近公司在搞版本release推广,简单讲就是线上使用release版本,线下使用snapshot版本。
- 公司采用统一的jar包管理方式,在小组内部维护了一个统一的公共依赖管理jar包升级。
- 在修改多模块项目的时候涉及到client的版本调整,这个时候就需要升级version版本。这个时候是否通知依赖方升级client的版本而引发的问题。
2.问题
本地搭建工程验证maven对统一jar的传递依赖到底以哪个jar包版本为准?
3.验证方法
// A、B、C、D为测试工程项目
// -> 表示依赖的含义
// 数字表示jar包版本,如 1.0 1.1等
A 1.0
A 1.1
B 1.0 -> A 1.0
D 1.0 -> A 1.1
C 1.0 -> B 1.0 -> A 1.0
C 1.0 -> D 1.0 -> A 1.1
// 最后验证C工程的引用依赖具体引用的是哪个jar包?
4.验证过程
4.1 A工程pom 打两个包,分别为A 1.0和A 1.1


4.2 B工程pom引入A 1.0 依赖

4.3 D工程pom引入A 1.1 依赖

4.4 C工程pom 先引入B 1.0 再引入 D 1.0 依赖

4.5 C工程pom 先引入D 1.0 再引入 B 1.0依赖

4.6 C工程显式引入A 1.1 依赖

5.标题4.4、4.5、4.6都是依赖冲突

6.结论
maven的传递依赖的策略
1. 如果项目显式指定依赖的版本就以显式的版本为准,例如标题5
2. 如果项目通过传递依赖引入相同的jar包,根据引入jar包依赖的顺序决定,例如标题4.4和4.5
3. 同一个工程不论是显式引入还是隐式引入相同jar包,只会有一个jar包保留