Java的强大之处就是在于它的生态环境,有众多的轮子支持复杂项目的开发。现在基本上每个稍微有点规模的Java项目都会依赖到众多的jar包,而Maven应该是目前管理jar包依赖最流行的工具。然而,过多复杂的jar包依赖就可能造成版本冲突问题。比如:
项目依赖A和B;A依赖C1.0,B依赖C2.0,如果C的两个版本不兼容,我们的项目就会出现问题。
像例子中这样的C在还是很多的,最常见的就属apache的一堆工具包,比如commons-logging;
冲突解决方法:
1 分析冲突的jar包的依赖路径
mvn dependency:tree -Dverbose -Dincludes=commons-logging:commons-loggging
这条命令可以打印出所有依赖了groupId和artifactId都为commons-logging的jar包的依赖路径。
2 选择一个所需的版本
在两个冲突的版本中,我们在自己的项目中用到了哪个版本的语法,就选择哪个。
3 在本项目的pom中将冲突的依赖排除:
具体写法:
比如我们要将一个依赖中的相应的jar包排除:
Java
<dependency>
<groupId>com.xxx.xx</groupId>
<artifactId>xxx</artifactId>
<version>x</version>
<exclusions>
<exclusion>
<artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
最后推荐一下intellij,在intellij中打开你的pom.xml,右键单击内容,选择diagram->show dependencies, 会自动执行mvn:dependency 并绘制一个依赖树,列出所有的依赖包如下图所示。想要排除哪个,可以直接右键选择"exclude".不过目前我还没发现怎样像命令行一样过滤树的结果,所有如果依赖太多,还是先执行一下命令找出哪里的依赖冲突了比较好。
![dependency.jpg](https://img.haomeiwen.com/i1713176/1b64d1abc8bd6ebd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论