概要:ビルド システムとしてApache Mavenを使用する JEE6 プロジェクトがあります。私のプロジェクトは、いくつかの一般的な JAR、いくつかの EJB モジュール、および WAR を含む EAR を生成します。生成された EAR は、JBoss AS 7 (現時点では 7.1.1) にデプロイする必要があります。
ベスト プラクティス: Web アプリケーション (私のような もの) があり、Web アプリケーション(マネージド Bean) のクラスが他のプロジェクトで再利用される可能性がある場合、これらのクラスを別の JARにパッケージ化し、 WAR がこの JAR に依存するようにします。次に、JAR が EAR と一緒にパッケージ化されます (ただし、WAR 内にはパッケージ化されません)。これまでのところ、すべてが正常に機能しています。
私のEARのレイアウトは次のとおりです。
EAR
+-- lib
| +-- [some 3rd party JARs]
| `-- war-backingbeans.jar
+-- myEJBs.jar
`-- myWAR.jar
問題: backingbeans JAR 内のクラスが のようないくつかの JSF クラスに依存して開始すると、問題が発生しますFacesContext
。JBoss AS7 には JSF JAR が含まれており、クラスパス上の WAR にこれらの JAR を自動的に提供します。ただし、これらの JAR は、EAR または EAR 内の他の JAR のクラスパスにはありません。
Maven側の関連するJARに対応する依存関係を追加することもできますが、それはEARにパッケージ化されたJSF JARになってしまいます。私が実際に望んでいるのは、JBoss が JSF JAR を JAR のクラスパスに配置することです。
EAR のディレクトリに次の内容のjboss-deployment-structure.xml
ファイルを提供することで、これに対する解決策を見つけました。META-INF
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<dependencies>
<module name="javax.faces.api" slot="main" export="true"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
私の質問は今、私は正しい方法でやっていますか、それともこれはハックと見なされますか? 私の問題に対するより良い/よりポータブルなソリューションはありますか?
よろしくお願いし
ます - マーティン