我有一个Linkage错误,似乎Jboss(5.2)提供了类produnit
的一个版本,而我在某处提供了该类的另一个实现。我已经搜索了这个类,它是包含它的maven项目org.apache.cxf.jaxb.attachment.JAXBAttachmentMarchaller
,因此我从使用Apache CXF的依赖项中排除了该项目,但错误仍然存在。
我真的不理解错误信息,尤其是部分 ...对于shaller.addMtomAttachment类型有不同的Class对象(Ljavax / activation / DataHandler; Ljava / lang / String; Ljava / lang / String;)Ljava / lang / String;
cxf-rt-databinding-jaxb
打包到项目中的依赖项?如果此问题有另一种解决办法,请纠正我。
JAXBAttachmentMarchaller
答案 0 :(得分:0)
如何找到负责将JAXBAttachmentMarchaller打包到项目中的依赖项?
在网络上搜索捆绑文件的maven项目。对我而言是cxf-rt-frontend-jaxws
。
您需要做的是从程序集中删除此依赖项,它不能包含在WAR / EAR文件中,因为JBoss提供了另一个版本的依赖项并且存在冲突。
在pom.xml
中查找cxf-rt-frontend-jaxws
并确保其标记为<scope>provided</scope>
,因为我们希望服务器提供依赖关系。如果您的cxf-rt-frontend-jaxws
中没有pom.xml
,则表示该项目是对您的某个依赖项的子依赖项。这很难解决,因为依赖关系可以存在于几个子依赖关系中。有些人建议使用mvn dependency:tree
来查找哪些项目负责捆绑WAR / EAR文件中的依赖项。
我找到了负责任的项目,它是一个内部组件,因此我可以轻松地将<scope>provided</scope>
添加到组件中以从WAR / EAR文件中删除cxf-rt-frontend-jaxws*jar
。我验证了依赖项不再捆绑在WAR文件中,方法是将其解压缩并列出WEB-INF/lib
不再列出的位置。
如果无法更改范围,则必须使用exclude-tag将其从装配中删除。