参考:http://ian.wang/106.htm
参考:https://blog.csdn.net/u014515854/article/details/80407024
参考:http://www.mamicode.com/info-detail-2246820.html (查看依赖冲突解决办法)
maven学习笔记系列:https://blog.csdn.net/u011781521/article/details/79055605
一、问题
项目开发过程中,经常会遇到jar冲突,然后maven根据自己的规则进行冲突解决,导致项目在运行的过程中报错。
1、maven自动解决依赖冲突的规则是什么?
2、如何查看当前项目的maven的依赖树?
3、如何从依赖树中找到自己预期的版本,是被那个jar给覆盖了?
4、如何人工进行依赖冲突解决,达到使用目的?
二、解决问题
1、maven自动解决依赖冲突的规则是什么?
第一原则:路径最近者优先
项目A有如下的依赖关系:
A->B->C->X(1.0)
A->D->X(2.0)
则该例子中,X的版本是2.0
第二原则:路径相等,先声明者优先
项目A有如下的依赖关系:
A->B->Y(1.0)
A->C->Y(2.0)
若pom文件中B的依赖坐标先于C进行声明,则最终Y的版本为1.0
2、如何查看当前项目的maven依赖树?
//进入项目的pom.xml文件的目录下,运行如下命令 //这个是正常依赖的树 mvn dependency:tree //这个命令是查看maven是如何解决依赖冲突的依赖树 mvn -Dverbose dependency:tree //如果想将依赖树打印到指定文件中,则命令如下 mvn -Dverbose dependency:tree -Doutput=/Users/shangxiaofei/sxfoutput.txt