2016-12-04 6 views
2

Wildfly 10.1의 EAR 프로젝트에 LinkageError이 있습니다. 프로젝트에 ejb 및 웹 하위 프로젝트가 있습니다. Maven의 종속성 관리. Gson Package는 학부모와 두 서브 프로젝트의 무도회에 추가됩니다.Wildaven 빌드의 Java LinkageError 빌드

두 번째 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

이 문제는 EAR/lib 디렉토리와 WAR 파일의 WEB-INF/lib 디렉토리 모두에서 GSON 항아리의 사본을함으로써 발생한다.

따라서 트릭은 WAR 파일에서 해당 트릭을 없애는 것입니다.

간단한 해결책은 웹 모듈의 pom.xml 파일에 종속성을 <scope>provided</scope>으로 표시하는 것입니다.

보다 정교한 접근법은 Creating Skinny WARs에 설명 된대로 "스키니 워즈"로 EAR 파일을 빌드하는 maven-ear-plugin의 기능을 사용하는 것입니다. 이것은 기본적으로 EAR 어셈블리 프로세스 중에 웹 모듈의 WEB-INF/lib 디렉토리에서 중복 된 jar를 제거합니다.

EAR 파일 빌드에 다른 jar의 사본이 여러 개있을 수 있으므로 첫 번째 방법으로 한 번에 하나씩 발견하게되므로 두 번째 방법이 더 유용 할 수 있습니다.