1

<packagingExcludes>Mavenウォープラグインを使用しようとしています。

これは私の構成です:

          <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ディレクトリにパッケージ化されています。

私はMaven3を使用しています。

どんな助けでも大歓迎です。

前もって感謝します、


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.

いいえ、例外、警告、エラー、または疑わしいと思われるものはありません。具体的に探す必要がありますか?

4

4 に答える 4

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ます。これにより、推移的な依存関係のスコープがオーバーライドされるため、パッケージ化されなくなります。

別の方法として、war プラグインを使用すると、正規表現に基づいて除外することもできますが、構文はもう少し複雑です。次のスニペットではlib、ファイル名が「jaxb」で始まるすべてのものを除外する必要があります。

<packagingExcludes>%regex[WEB-INF/lib/jaxb.*]</packagingExcludes>
于 2012-05-10T11:54:04.917 に答える
3

これは、それらをプロジェクトの依存関係として持っているため、戦争にパッケージ化されることを意味します。依存関係を削除するだけで、パッケージ化されなくなります。

使用したオプションのドキュメントに基づいて、正規表現を使用する必要があります。つまり、次のように記述する必要があります。

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

それ以外の

<packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes>
于 2012-05-08T09:01:53.807 に答える