Maven传递依赖

1,219 阅读1分钟

Maven传递依赖

1.背景

  1. 最近公司在搞版本release推广,简单讲就是线上使用release版本,线下使用snapshot版本。
  2. 公司采用统一的jar包管理方式,在小组内部维护了一个统一的公共依赖管理jar包升级。
  3. 在修改多模块项目的时候涉及到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.44.5
3. 同一个工程不论是显式引入还是隐式引入相同jar包,只会有一个jar包保留