4

当たり前のことを考え直しています。つまり、次の構造のEARでは次のようになります。

EAR
 \-- boo-ejb.jar
 \-- foo-web.war
 |    \--WEB-INF
 |          \--lib
 \--lib

.. WEB-INF / libはWebアプリケーションでのみ必要なjar用であり、 EJb.jarでも必要なjar用のEARレベルのlibであることを正しく理解していると思います。どういうわけか依存関係をより明確にするという理論的根拠。ただし、すべてをEARレベルのlibフォルダーにダンプしないのはなぜですか?確かに、ある種の対立がある場合、私たちは深く知り、調査したいと思います。それはよりクリーンなソリューションであり、潜在的な互換性/依存関係の不一致の問題を隠蔽する傾向が少ないのではないでしょうか?

4

3 に答える 3

7

あなたは絶対に正しいです-それははるかに明確で、依存関係の不一致によるエラーが発生しにくいでしょう。

しかし...

EAR 内で Web アプリケーションを配布しない場合はどうなりますか? ライブラリをどこに配置しますか?Web アプリケーションのセットに基づいてエンタープライズ アプリケーションを構成するために、Web アプリケーションをさまざまな EAR に分散するにはどうすればよいでしょうか?

WEB-INF/lib は、リソースのみを含むことができる (クラスを含まない) jar 用でもあります。次に、Web 指向のリソース jar を EAR レベルの lib に入れますか? 私はそうは思わない。

EAR の lib よりも WEB-INF/lib を使用する理由は他にもあるかもしれませんが、上記の 2 つまたは 3 つのケースは、少なくともライブラリを管理する戦略を再考するよう説得するのに十分なはずです。

于 2013-01-18T12:21:23.673 に答える
1

EARファイルでは、EARレベルのlibフォルダーはすべてのWebアプリ(つまり、EAR内のすべての.wars)にあります。.war内のlibは、Webアプリwarでのみ使用できるライブラリ用です。

多くの場合、特定のライブラリをEARレベルにプロモートし、クラスパスローダープリファレンスの優先度設定(提供されたアプリサーバーと提供されたEARの間)jarを設定する必要があります。これは、WebSphereなどのサーバーで一般的に必要です。

以下は、特定のjarがEARレベルから取得され、特にWARから除外されるMavenの戦争構成の例です。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
    <archive>
    <manifestEntries>
         <Class-Path>lib/wsdl4j-1.6.2.jar lib/mail-1.4.jar</Class-Path>
    </manifestEntries>
    </archive>
    <packagingExcludes>WEB-INF/lib/wsdl4j-1.6.2.jar,WEB-INF/lib/mail-1.4.jar</packagingExcludes>
    <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
    <warSourceExcludes>WEB-INF/jetty-env.xml</warSourceExcludes>
  </configuration>
 </plugin>
于 2013-01-17T21:44:35.547 に答える