maven生成的Wildfly上的Java LinkageError

maven生成的Wildfly上的Java LinkageError,java,maven,jakarta-ee,jboss,linkageerror,Java,Maven,Jakarta Ee,Jboss,Linkageerror,我在Wildfly 10.1上的EAR项目中有一个LinkageError。 该项目包含一个ejb和一个web子项目。Maven的依赖关系管理。Gson包添加到父prom和两个子项目的prom中 无法确定第二个gson类的加载位置。对如何解决这个问题有什么建议吗 15:02:14,242 ERROR [io.undertow.request] (default task-2) UT005023: Exception handling request to /Trigger-Server-web

我在Wildfly 10.1上的EAR项目中有一个
LinkageError
。 该项目包含一个ejb和一个web子项目。Maven的依赖关系管理。Gson包添加到父prom和两个子项目的prom中

无法确定第二个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

这个问题是由于WAR文件的EAR/lib目录和WEB-INF/lib目录中都有一个Gson jar副本引起的

因此,诀窍是去掉WAR文件中的一个

简单的解决方案是在web模块的pom.xml文件中将其依赖项标记为
提供的

一种更复杂的方法是利用maven ear插件的能力,通过“瘦战争”构建ear文件,如中所述。这实际上是在EAR组装过程中从web模块的web-INF/lib目录中删除重复的jar

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