开发中难免遇到maven依赖冲突,MAVEN构建会报错,例如:
Found in:
commons-logging:commons-logging:jar:1.1:compile
org.slf4j:jcl-over-slf4j:jar:1.7.21:compile
Duplicate classes:
org/apache/commons/logging/LogConfigurationException.class
org/apache/commons/logging/Log.class
org/apache/commons/logging/impl/NoOpLog.class
org/apache/commons/logging/impl/SimpleLog.class
org/apache/commons/logging/LogFactory.class
org/apache/commons/logging/impl/SimpleLog$1.class
原因:
web项目A, 依赖包B,C, 而C也依赖B,只是两个B版本不同,其中有些方法可能不同,甚至缺失。
maven根据最近获胜策略,只会 获取其中一个
解决方案:
去除其中一个依赖
<dependency>
<groupId>C</groupId>
<artifactId>C</artifactId>
<version>1.0.8</version>
<exclusions>
<exclusion>
<groupId>B</groupId>
<artifactId>B</artifactId>
</exclusion>
</exclusions>
</dependency>
当然 最难的是如何定位出 究竟是 谁和谁冲突了,或者说 exclusions 究竟加在哪个依赖下。
使用 mvn dependency:tree -Dverbose
工程大的话,打印出的结果会很长,可以指定 某一个依赖去看
mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId