1

概要:ビルド システムとして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>

私の質問は今、私は正しい方法でやっていますか、それともこれはハックと見なされますか? 私の問題に対するより良い/よりポータブルなソリューションはありますか?

よろしくお願いし
ます - マーティン

4

1 に答える 1

2

JBoss AS 7 は、いくつかのモジュールをアプリケーション/ear のクラスパスに自動的に追加します。ここで完全なリストを見つけることができます。このリストには、Web サブシステムの javaee.api と com.sun.jsf-impl が記載されているため、jboss-deployment-structure でそれらを追加する必要はありません。

ただし、モジュールを置き換えずに JBoss に同梱されているバージョンとは異なる JSF バージョンを使用する場合など、より高度なオプションを実行する場合は jboss-deployment-structure ファイルが必要になります。次に、これを読みたいと思うかもしれません。

したがって、あなたの説明からわかる限り、jboss-deployment-structure は必要ありません。jsf maven 依存関係のスコープを に設定するだけprovidedです。

于 2013-10-23T14:21:17.223 に答える