最近在工作中用CXF遇到Jar包冲突的问题,在此做一个记录。
在使用CXF调用WebService服务时,遇到一个异常:java.lang.NoSuchMechodError:org.apache.ws.commons.schema.XmlSchemaCollection.getExtGet().然而Jar包已经在Maven的pom.xml中引入进来了,jar包是xmlschema-core-2.0.3.jar,可是点击类XmlSchemaCollection却链接到了XmlSchema-1.1.jar原来这个包里的类版本比较低。仔细一查看这个Jar是被xfire-all-1.2.6.jar依赖而引入进来的,于是两个Jar中的class就相互冲突了。
于是得想办法把XmlSchema-1.1.jar不引入,经过请教同事和网上找资料,Maven可以在pom.xml通过配置<exclusions>解除对于其他jar的引用。配置如下:
<dependency>
<goupId>org.codehaus.xfire</goupId>
<artifactId>xfire-all<artifactId>
<version>1.2.6</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.xfire</goupId>
<artifactId>xfire-spring</artifactId>
</exclusion>
<--! 解除jar依赖 -->
<exclusion>
<groupId>org.apache.ws.commons</goupId>
<artifactId>XmlSchema</artifactId>
</exclusion>
</exclusions>
<dependency>
附录:问题处理和截图
异常信息:
查看class所在jar
两个jar都有该class
查看jar依赖关系
解除jar依赖关系