在maven打包时经常遇到 类似这样的错误Caused by: java.lang.ClassNotFoundException
maven在一般情况下会自己解决冲突,解决冲突的依据是
-
就近原则
A <- B <- C(2.0),A <- C(1.1)。
A依赖B B依赖于C A依赖于C
上面这种情况是maven会选择于
C(1.1)这个jar -
谁在上面选谁
上面这种情况maven会选择2.7.8这个版本
需要我们手动解决的冲突
A <- B <- C<- D(2.0),A <- B<-D(1.1)。
A依赖B B依赖于C A依赖于C
上面这种情况是maven会自己选择于
D(1.1)这个jar
类似于这种情况C用到的类正好D(1.1)没有 这种情况需要我们自己解决
移除依赖:用于排除某项依赖的依赖jar包
(1)我们可以借助Maven Helper插件中的Dependency Analyzer分析冲突的jar包,然后在对应标红版本的jar包上面点击execlude,就可以将该jar包排除出去
(2)运用maven命令
mvn dependency:tree
出现上面类似的 自己分析使用下面的标签去排除相应的jar包,一般java保持向后兼容性,我们保留最新的冲突jar就可以的。(一般情况 一般情况 一般情况)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>1.4.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>