3

3 つの war-modules が ear-module にパッケージ化されているプロジェクトがあります。私の問題は、各ライブラリ jar が各 war-module と ear-module に含まれているため、結果の ear-file が非常に大きくなることです (現時点では約 190MB)。

ここでmavenを使用してスキニー戦争を作成するためのチュートリアルに従いました: http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

これで、ear のサイズを約 45MB まで小さくすることができました。

これは、war ファイルとしてパッケージ化されている appfuse-struts への依存が原因であることがわかりました。これは、war-project の 1 つで warpath の依存関係を使用して含まれています。

スキニー戦争の作成に関するチュートリアルでは、戦争で見つかったすべての依存関係も耳で定義する必要があると述べているためです。私はこれを試しましたが、appfuse-struts の依存関係が warpath であるため、これは機能しませんでした。(war 依存関係のみを ear pom に追加すると、一部のクラスが見つからないと不平を言い、warpath 依存関係も追加すると、maven は warpath が何かわからないと不平を言います。)

war が warpath の依存関係を使用している場合、skinny war で耳を作成する方法を知っている人はいますか?

4

1 に答える 1

5

私は解決策を見つけたかもしれないと思います:

skinny wars チュートリアルでは、WEB-INF/lib/*.jar を PackagingExcludes に追加することになっています。次に、すべての依存関係を ear 構成に追加して、jar で使用できるようにしました。

問題は、war パッケージ化された依存関係の推移的な依存関係が ear の lib フォルダーに追加されないため、ear lib フォルダーまたは war パッケージの WEB-INF/lib フォルダーへの道を見つける必要があることです。

私は最後のものを選び、それらを war ファイルの WEB-INF/lib に追加しました。

これを行うには、まず、.war/warpath リソースを含む war プロジェクトの依存関係ツリーを取得しますmvn dependency:tree

次に、ウォーパスの依存関係を見つけます。私の場合、次のようになりました。

      +- org.appfuse:appfuse-struts:warpath:2.0.2:compile
      |  +- org.appfuse:appfuse-web-common:war:2.0.2:compile
      |  +- org.appfuse:appfuse-web-common:warpath:2.0.2:compile
      |  +- displaytag:displaytag:jar:1.1.1:compile
      |  |  \- org.slf4j:jcl104-over-slf4j:jar:1.4.2:compile
      |  +- commons-fileupload:commons-fileupload:jar:1.2.1:compile
      |  +- org.apache.commons:commons-io:jar:1.3.2:compile
      |  +- org.appfuse:appfuse-service:jar:2.0.2:compile
      |  |  +- velocity:velocity:jar:1.4:compile
      |  |  |  \- velocity:velocity-dep:jar:1.4:runtime
      |  |  +- org.codehaus.xfire:xfire-java5:jar:1.2.6:compile
      |  |  |  +- org.codehaus.xfire:xfire-aegis:jar:1.2.6:compile
      |  |  |  |  \- net.java.dev.stax-utils:stax-utils:jar:20040917:compile
      |  |  |  +- org.codehaus.xfire:xfire-annotations:jar:1.2.6:compile
      |  |  |  +- xfire:xfire-jsr181-api:jar:1.0-M1:compile
      |  |  |  \- org.codehaus.xfire:xfire-core:jar:1.2.6:compile
      |  |  |     +- stax:stax-api:jar:1.0.1:compile
      |  |  |     +- org.codehaus.woodstox:wstx-asl:jar:3.2.0:compile
      |  |  |     \- commons-httpclient:commons-httpclient:jar:3.0:compile
      |  |  \- org.codehaus.xfire:xfire-spring:jar:1.2.6:compile
      |  |     +- org.apache.xbean:xbean-spring:jar:2.8:compile
      |  |     \- org.codehaus.xfire:xfire-xmlbeans:jar:1.2.6:compile
      |  |        \- xmlbeans:xbean:jar:2.2.0:compile
      |  +- commons-dbcp:commons-dbcp:jar:1.2.2:compile
      |  |  \- commons-pool:commons-pool:jar:1.3:compile
      |  +- org.directwebremoting:dwr:jar:2.0.1:compile
      |  +- javax.servlet:jstl:jar:1.1.2:compile
      |  +- taglibs:standard:jar:1.1.2:compile
      |  +- opensymphony:oscache:jar:2.3:compile
      |  +- opensymphony:sitemesh:jar:2.2.1:compile
      |  +- org.tuckey:urlrewritefilter:jar:3.0.4:compile
      |  \- commons-lang:commons-lang:jar:2.4:compile

したがって、これらが利用可能であることを確認する必要があります。これは、WEB-INF/lib/* の PackagingExclude を変更して、すべてを除外するのではなく、保持したいもの以外をすべて除外することで実行できます。

これは、次の方法で行うことができます。

      <packagingExcludes>
       %regex[WEB-INF/lib/(?!clickstream|struts|appfuse|commons-fileupload|commons-dbcp|dwr|oscache|sitemesh|urlrewritefilter|commons-lang|velocity|xwork|commons-digester).*.jar]
      </packagingExcludes>

これにより、グラスフィッシュはクラスが見つからないという不平を言うのをやめます。私はまだそこに達していないので、さらにいくつかの jar を含める必要があるかもしれませんが、近づいています。

于 2012-07-12T15:03:07.607 に答える