原因分析:
出现版本冲突的原因是因为由于Maven具有依赖传递性,所以当你引入一个依赖类的同时,其身后的依赖类也一起如过江之鲫纷至沓来了。
举个例子:
A依赖于B及C,而B又依赖于X、Y,而C依赖于X、M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖)。
这里有一个需要特别注意的,即B和C同时依赖于X,假设B依赖于X的1.0版本,而C依赖于X的2.0版本,A究竟依赖于X的1.0还是2.0版本呢? 这就看Classloader的加载顺序了,假设Classloader先加载X_1.0,而它就不会再加载X_2.0了,如果A恰恰希望使用X_2.0呢,血案就这样不期而遇了。就会出现了“omitted for conflict with…”依赖版本冲突的问题。
————————————————
解决方法:
解决依赖版本冲突的方法其实很简单,将不想要或低版本的传递依赖去除掉即可。
比如我这个项目的maven依赖中错误如图中显示的已经很明确了,同时存在两个不同版本的依赖类“org.scala-lang:scala-library:2.11.4”与“org.scala-lang:scala-library:2.11.7”,由依赖关系可以看出,二者都是由依赖“org.apache.kafka_2.11:0.9.0.1”引入的,那么我们pom.xml文件中找到这个依赖,加入如下配置项代码,将低版本的传递依赖包去除掉就ok了。
————————————————
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>1.2.6</version>
<!-- 去除版本不一致的传递依赖包 -->
<exclusions>
<exclusion>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.0.2</version>
</exclusion>
</exclusions>
</dependency>
————————————————
去除掉后刷新maven即可。。。。。