Maven检查jar包是否冲突,并解决冲突。(转)

 

在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令:
 
1
2
3
mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false
 
mvn -U dependency:tree -Dverbose
 
dependency: tree是检查版本冲突的
enforcer:enforce是用来检查重复类的
 
 
简单地用 dependency:tree往往并不能查看到所有的传递依赖。不过如果你真的想要看所有的,必须得加一个 -Dverbose参数,这时就必定是最全的了。
全是全了,但显示出来的东西太多有时候会很烦,加上 Dincludes或者 Dexcludes,就会包含或者排除你指定的依赖了, dependency:tree就会帮你过滤出来:比如:
mvn dependency:tree -Dverbose -Dincludes=asm:asm 就会出来asm依赖包的分析信息。
 

解决办法

1)开发在本地执行此命令可以检查Jar包版本冲突:mvn -X compile dependency:tree -Dverbose >a.log,然后在a.log文件里查找 是否有"omitted for conflict with",如果有,则表示jar包有版本冲突 ;

注意:有版本冲突的也会显示编译成功的。

 

我使用它的打印到a.log的方法,确实检查到了冲突。

我检查maven依赖冲突以及解决的方法:

 

进入idea的pom,右键->maven->showDependencies可以看到jar包依赖图

然后观察是否头相同的jar包,选择指定的要删除的jar包,右键,exclude即可。

如果该jar包是某个jar包的依赖包,移除对应在dependency中时这样的:

<dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>xml-apis</artifactId>
                    <groupId>xml-apis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

 

posted @ 2017-08-06 18:58  guodaxia  阅读(526)  评论(0编辑  收藏  举报