maven冲突处理

命令

1
mvn -U dependency:tree -Dverbose |grep zkclient --color=auto -B 20

参数解释

-U

该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新

dependency:tree

查看依赖树

-Dverbose

可以打印出依赖树中详细的信息

|grep zkclient

grep通道:查看依赖树中名字包含zkclient的数据

–color=auto

标红查询到的内容,方便从树中进行排查

-B 20

以查询到的数据行为起点向上寻找20行,能找到哪一个节点引入该包

实际情况分析

1
2
3
4
5
6
7
8
9
10
[INFO] +- org.apache.tomcat:tomcat-servlet-api:jar:7.0.70:compile  
[INFO] +- org.apache.tomcat:tomcat-jsp-api:jar:7.0.70:compile
[INFO] | +- org.apache.tomcat:tomcat-el-api:jar:7.0.70:compile
[INFO] | \- (org.apache.tomcat:tomcat-servlet-api:jar:7.0.70:compile - omitted for duplicate)
[INFO] +- net.sf.jasperreports:jasperreports:jar:5.6.0:compile
[INFO] | +- (commons-beanutils:commons-beanutils:jar:1.8.0:compile - omitted for conflict with 1.8.3)
[INFO] | +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] | +- commons-digester:commons-digester:jar:2.1:compile
[INFO] | | +- (commons-beanutils:commons-beanutils:jar:1.8.3:compile - omitted for duplicate)
[INFO] | | \- (commons-logging:commons-logging:jar:1.1.1:compile - omitted for duplicate)

看每一行末尾的参数,就是代表是否有冲突

:compile

成功编译,无冲突

:compile - omitted for duplicate

jar包被重复依赖,但是版本一致

:compile - omitted for conflict with XXX

比如上面有一行最后写着omitted for conflict with 1.8.3,那么该行的commons-beanutils:jar:1.8.0不会被引入,只有1.8.3版本的会被引入。

解决方案

<exclusions> 标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>  
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.3.2</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>

例子中,引入了com.alibaba.dubbo, 排除guava和spring