2012-05-08 33 views
1

Maven war-pluginの<packagingExcludes>を使用しようとしています。jaxb jarを除外するmaven-war-pluginを取得できません

これは私の設定です:

私の理解で
  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <archive> 
        <manifestEntries> 
         <Implementation-Version>${project.artifactId}-${project.version}-r${buildNumber}</Implementation-Version> 
         <Implementation-Buildtime>${timestamp}</Implementation-Buildtime> 
        </manifestEntries> 
       </archive> 

       <packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes> 
      </configuration> 
     </plugin> 

このライン:

<packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes> 

が組み込まれて.warファイルから 'JAXB' で始まるすべてのjarファイルを除外する必要があります。

しかし、私はclean installを実行した後、私は両方の取得:

jaxb-api-2.1.jar 
jaxb-impl-2.1.3.jar 

は私の.war WEB-INF/libのディレクトリにパッケージ化されました。私はMavenの3

大歓迎任意のヘルプを使用してい

。 gkamalさんのコメントに答えるために、事前に

おかげで、


私はmvn war:war -Xを実行すると、私は見ることができます。また

[DEBUG] Processing: jaxb-api-2.1.jar 
[DEBUG] + WEB-INF/lib/jaxb-api-2.1.jar has been copied. 
[DEBUG] Processing: jaxb-impl-2.1.3.jar 
[DEBUG] + WEB-INF/lib/jaxb-impl-2.1.3.jar has been copied. 

[DEBUG] Excluding [WEB-INF/lib/jaxb*.jar] from the generated webapp archive. 

いいえ、例外、警告やエラーや疑わしい何も、私は探さなければならない具体的な何かを?

+0

-Xで実行して、情報を取得できるかどうかを確認してください。単にwar:warを実行するだけです。 – gkamal

+0

@gkamal私は普通のものを見ることができません。 – Simeon

+0

ワイルドカードの代わりにjarファイルのフルパスを試すことができますか? – gkamal

答えて

3

、あなたはexclusionsを使用することができます要素を除外します。

<dependency> 
    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <version>...</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.xml.bind</groupId> 
      <artifactId>jaxb-api-2.1</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

gkamalはコメントとして、あなたはまた、それはもはやパッケージされているので、これは推移的依存関係の範囲を無効にしません、JAXBの明示的な依存関係を追加し、providedにその範囲を設定することができます。

もう一つの選択肢は、戦争のプラグインもexclude based on regular expressionsすることができますが、構文は次のコードは、そのファイル名「JAXB」で始まるlibの下にあるすべてのものを除外する必要があり、もう少し複雑です:

さらに
<packagingExcludes>%regex[WEB-INF/lib/jaxb.*]</packagingExcludes> 
+0

これを受け入れると少し明確になり、より多くのオプション(個人的な意見のみ、両方の答えが正しいIMOです)があります。 – Simeon

3

これはプロジェクトに依存しているため、戦争にパッケージ化されることを意味します。依存関係を削除して、もうパッケージ化されないようにしてください。

あなたが書くべき意味正規表現を使用する必要がありますが、使用オプションのドキュメントに基づいて:推移的依存関係のために

<packagingExcludes>WEB-INF/lib/jaxb.*</packagingExcludes> 

代わりの

<packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes> 
+0

いいえ、私たちは依存関係はありません。依存性は推移的です。つまり、使用するライブラリがJAXB実装を使用し、JDK実装を使用することを意味します。 – Simeon

+0

私は 'WEB-INF/lib/jaxb。*'を同じ結果にしようとしました。 – Simeon

+0

正規表現が使われるべきであると書かれているところはどこにも見当たりません。 '**/*。xml'の構文は正規表現ではなく、ドキュメントの一例です。 – Simeon

2

@へあなたの質問(08/05/12 @ 11:52)に対するgkamalのコメントは、あなたのmaven-war-pluginのバージョンを確認してください。私はちょうどこの問題を見て、javaee-api * .jarへの未知の過渡現象を除外するために2時間を費やしました。

maven 3.0.4では、デフォルトでmaven-war-pluginバージョン2.1に設定されました(ビルドをデバッグで実行するかどうかは、例えばmvn clean package -X)。あなたの他のコメントの1つは、package-excludesがこの後に来たという意味で正しいです。 war plugin page for detailsを参照してください(エントリを記述している実際のページは、最初に検索するものとしてはかなり悪いバージョン情報を示すものではありません)。

ます(Mavenの戦争 - プラグインのために2.3(あなたのpackaging-excludesを使用すべきである、<version>2.3</version>を追加します。あなただけではない過渡戦争のディレクトリに、構築された戦争のWEB-INF/libにこれを見るでしょうが注意を更新した場合どの)この問題を見たときに非常に混乱している、デバッグは、彼らが除外されるようにしていると言う場合でも、除外のjarファイルが含まれています。

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    ... 
    <packagingExcludes> 
     WEB-INF/lib/whatever-*.jar, 
     WEB-INF/lib/javaee-api-*.jar 
    </packagingExcludes> 
    ... 
    </plugin> 
    ... 

しかし、ベストプラクティスの観点から、これはおそらく除外するための最後のあえぎの努力でありますjarとwarのjarファイルと一時的なjarファイルの依存関係レベルの除外はおそらく最も正確で正しい方法でしょう。つまり、一時的なjarファイルが複数の依存関係によって持ち込まれている場合はどうでしょうか?

バージョンアップでは、@khmarbaiseの解決策はうまくいくと思います(そして、それがうまくいかないことを示すコメントは間違っています)。しかし、私はベストプラクティスがあなたの受け入れられた答えとして依存レベルの除外を使用することだと思います。

0

<packagingExcludes></packagingExcludes></configuration><configuration>の内側に指定すると、これを行うことができます。

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>3.2.0</version> 
     <configuration> 
      <packagingExcludes> 
      WEB-INF/lib/ex1-*.jar, 
      WEB-INF/lib/ex2-logging-*.jar 
      </packagingExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

あなたもワイルドカード正規表現でパスを指定することができます。詳細はlinkを参照してください。

関連する問題