Tengo un LinkageError en mi proyecto EAR en Wildfly 10.1. El proyecto contiene un subproyecto ejb y web. Gestión de dependencias por Maven. El paquete Gson se agrega en la promoción principal y en las promociones de ambos subproyectos.

No puedo averiguar dónde se carga la segunda clase gson. ¿Alguna sugerencia sobre cómo solucionar esto?

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
ynotu. 4 dic. 2016 a las 17:13

1 respuesta

La mejor respuesta

Este problema se debe a tener una copia del jar de Gson tanto en el directorio EAR / lib como en el directorio WEB-INF / lib de su archivo WAR.

Por lo tanto, el truco consiste en deshacerse del que está en el archivo WAR.

La solución simple es marcar su dependencia como <scope>provided</scope> en el archivo pom.xml del módulo web.

Un enfoque más sofisticado es hacer uso de la capacidad del complemento maven-ear-plugin para crear archivos EAR con "skinny WARS" como se describe en Creación de WAR reducidos. Básicamente, esto elimina jar duplicado del directorio WEB-INF / lib de su módulo web durante el proceso de ensamblaje de EAR.

Es posible que encuentre mejor el segundo enfoque porque es posible que tenga varias copias de otros archivos jar en la compilación de su archivo EAR, y los descubrirá una a la vez con el primer enfoque.

2
Steve C 5 dic. 2016 a las 11:22