Maven 依赖调解是 Maven 解决项目中多个依赖版本冲突的机制。当项目直接或间接依赖了同一个库的不同版本时,Maven 需要决定最终使用哪个版本。
依赖调解的两大原则
最短路径优先
-
如果不同版本的依赖通过不同路径引入,Maven 会选择依赖路径最短的版本
A -> B -> C -> D 1.0
A -> E -> D 2.0
这里 D 2.0 的路径更短(A->E->D vs A->B->C->D),所以会选择 D 2.0
先声明优先
-
如果两个依赖路径长度相同,则在 POM 文件中先声明的依赖会被采用
A -> B -> D 1.0
A -> C -> D 2.0
如果 B 在 POM 中先于 C 声明,则选择 D 1.0
补充:
查看依赖关系
可以使用以下命令查看依赖树,分析依赖冲突:
mvn dependency:tree
解决依赖冲突的方法
-
显式声明版本:在 POM 中直接指定你想要的版本
-
排除依赖 :使用
<exclusions>
排除不需要的传递性依赖 -
使用 dependencyManagement:在父 POM 中统一管理版本
-
使用
<optional>true</optional>
:将依赖标记为可选