2016-12-04 88 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的多個副本,並且您將通過第一種方法每次發現這些方法。