したがって、問題は次のとおりです。2 つの戦争セットに耳を傾けています。各セットは同じライブラリの異なるバージョンを使用します (したがって、最初のセットで使用されるバージョンは 2 番目のセットから分離する必要があり、その逆も必要です)。耳の異なる場所に同じライブラリを数回配置する必要がありません。これらのライブラリの一部として、すべてのモジュールで共有される他のライブラリが含まれている場合があります。
考えられる解決策: セットごとに新しい戦争を追加できます。これらのセットには、同じセット内の残りの戦争によって共有されるライブラリのみが含まれます。次に、クラスローディングの問題なしに動作させるには、各 wars WEB-INF ディレクトリと、耳の META-INF/jboss-classloading.xml に便利に設定された jboss-classloading.xml を配置して、各セットを分離する必要があります。戦争を続けます。
したがって、構造は次のようになります。
yourapp.ear
|
|--lib
| |- place here the libraries shared by all the wars in the ear
|
|--META-INF
| |
| |-jboss-classloading.xml
|
|--war1SetA.war
| |
| |-WEB-INF
| |- jboss-classloading.xml
| |
| |- classes
|
|
|--war2SetA.war
| |
| |-WEB-INF
| |- jboss-classloading.xml
| |
| |- classes
|
|
|--libsSetA.war
| |
| |-WEB-INF
| |- jboss-classloading.xml
| |
| |- lib
| |-Place here the libraries used by wars of setA
|
|--war1SetB.war
| |
| |-WEB-INF
| |- jboss-classloading.xml
| |
| |- classes
|
|--war2SetB.war
| |
| |-WEB-INF
| |- jboss-classloading.xml
| |
| |- classes
|
|--libsSetB.war
|
|-WEB-INF
|- jboss-classloading.xml
|
|- lib
|-Place here the libraries used by wars of setB
libsSet* という名前の war は、同じセットの war で使用されるライブラリを保持するためだけに使用されます。
セット A の wars の jboss-classloading.xml は次のようになります。
<classloading xmlns="urn:jboss:classloading:1.0"
domain="SetA"
export-all="NON_EMPTY"
import-all="true"
parent-domain="yourapp.ear"
parent-first="false">
</classloading>
セット B の戦争の場合は、次のようになります。
<classloading xmlns="urn:jboss:classloading:1.0"
domain="SetB"
export-all="NON_EMPTY"
import-all="true"
parent-domain="yourapp.ear"
parent-first="false">
</classloading>
重要: ドメイン属性は、同じセット内のすべての戦争で同じでなければなりません。
最後に、ear ファイルの META-INF/jboss-classloading.xml は次のようになります。
<classloading xmlns="urn:jboss:classloading:1.0"
domain="yourapp.ear"
export-all="NON_EMPTY"
import-all="true"
parent-first="false">
</classloading>
これに似た別の可能な解決策は、各セットの共有ライブラリをセットの戦争の 1 つに配置することです。この方法では、ライブラリのためだけに戦争を行う必要はありません。