2016-12-04 19 views
2

Wildfly 10.1のEARプロジェクトにLinkageErrorがあります。 プロジェクトには、ejbとWebサブプロジェクトが含まれています。 Mavenによる依存関係管理。 Gson Packageは、親のpromと両方のサブプロジェクトのpromsに追加されています。Java LinkageError on Wildflyビルド対象:

2番目の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ファイルのものを取り除くことです。

単純な解決策は、Webモジュールのpom.xmlファイルに依存性を<scope>provided</scope>としてマークすることです。

さらに洗練されたアプローチは、Creating Skinny WARsに記載されているように、「スキニーウォーズ」を使用してEARファイルを構築するmaven-ear-pluginの能力を活用することです。これにより、EARアセンブリ処理中に、WebモジュールのWEB-INF/libディレクトリから複製されたjarファイルが削除されます。

EARファイルビルドに他のJARファイルを複数コピーしている可能性があるため、最初の方法で一度にこれらのJARファイルを見つけることができるため、