2016-12-04 59 views
2

我在Wildfly 10.1的EAR项目中有LinkageError。 该项目包含一个ejb和一个web子项目。 Maven的依赖管理。 Gson包被添加到两个子项目的父项目和子项目中。Wildfly上的Java LinkageError通过maven构建

找不到第二个gson类的加载位置。有关如何解决这个问题的任何建议?

15:02:14,242 ERROR [io.undertow.request] (default task-2) UT005023: 
Exception handling request to /Trigger-Server-web/event/quote:  
java.lang.LinkageError: loader constraint violation: when resolving 
interface method "de.company.triggerserver.ejb.EventProcessingLocal.processEvent(Ljava/lang/String;Lcom/google/gson/JsonObject;)Z" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, de/company/triggerserver/web/EventServlet, and the class loader (instance of org/jboss 
/modules/ModuleClassLoader) for the method's defining class, de/company 
/triggerserver/ejb/EventProcessingLocal, have different Class objects for the type com/google/gson/JsonObject used in the signature 

回答

2

此问题是由于在WAR文件的EAR/lib目录和WEB-INF/lib目录中拥有Gson jar的副本所致。

因此,诀窍是摆脱WAR文件中的一个。

简单的解决方案是在web模块的pom.xml文件中将其依赖项标记为<scope>provided</scope>

更复杂的方法是利用maven-ear-plugin的能力,通过Creating Skinny WARs中描述的“瘦小WARS”构建EAR文件。这实际上是在EAR组装过程中从Web模块的WEB-INF/lib目录中删除重复的jar。

您可能会发现第二种方法更好,因为您可能在EAR文件构建中有其他jar的多个副本,并且您将通过第一种方法每次发现这些方法。