美文网首页程序员
Maven 依赖jar包版本冲突解决

Maven 依赖jar包版本冲突解决

作者: 环球探测 | 来源:发表于2016-06-21 21:48 被阅读13400次

    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)

    相关文章

      网友评论

        本文标题:Maven 依赖jar包版本冲突解决

        本文链接:https://www.haomeiwen.com/subject/hcvgdttx.html