5

ビルド中のwarモジュールがあり、想定外のシュリンクラップjarがいくつか含まれています。すなわち:

WEB-INF/lib/shrinkwrap-api-1.0.0.jar
WEB-INF/lib/shrinkwrap-descriptors-api-base-2.0.0-alpha-2.jar
WEB-INF/lib/shrinkwrap-descriptors-spi-2.0.0-alpha-2.jar
WEB-INF/lib/shrinkwrap-resolver-api-1.0.0-beta-6.jar
WEB-INF/lib/shrinkwrap-spi-1.0.0.jar

これらの依存関係はすべてテストスコープとしてpomsにリストされているため、パッケージ化された戦争に含まれるべきではありません。以下の詳細情報ですが、私の質問は、なぜこれらがここにあるのかということです。明らかに私が見逃しているものがあります-それは何ですか/どこでそれを見つけることができますか?

効果的なpomを表示すると、次の依存関係が表示されます(ここでは多くのものを省略しています)。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
  <dependencyManagement>
    <dependencies>
    ...
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-extension-descriptors</artifactId>
        <version>1.0.0-beta-6</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-api</artifactId>
        <version>1.0.0</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-spi</artifactId>
        <version>1.0.0</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-impl-base</artifactId>
        <version>1.0.0</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api</artifactId>
        <version>1.0.0-beta-6</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api-maven</artifactId>
        <version>1.0.0-beta-6</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
        <version>1.0.0-beta-6</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-api-base</artifactId>
        <version>2.0.0-alpha-2</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-api-javaee</artifactId>
        <version>2.0.0-alpha-2</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-api-jboss</artifactId>
        <version>2.0.0-alpha-2</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-gen</artifactId>
        <version>2.0.0-alpha-2</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-impl-base</artifactId>
        <version>2.0.0-alpha-2</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-impl-javaee</artifactId>
        <version>2.0.0-alpha-2</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-impl-jboss</artifactId>
        <version>2.0.0-alpha-2</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-spi</artifactId>
        <version>2.0.0-alpha-2</version>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    ...
    <dependency>
      <groupId>org.jboss.shrinkwrap.resolver</groupId>
      <artifactId>shrinkwrap-resolver-api-maven</artifactId>
      <version>1.0.0-beta-6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.shrinkwrap.resolver</groupId>
      <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
      <version>1.0.0-beta-6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.shrinkwrap</groupId>
      <artifactId>shrinkwrap-impl-base</artifactId>
      <version>1.0.0</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>

依存関係ツリーを印刷すると、以下の出力が表示されます(問題のjarが含まれているノードのみが表示されます。これらのjarの一部は、「ru​​ntime」および「runtime(スコープはテストから管理)」としてリストされていますが、ほとんどの場合、それらが属する依存関係はテストスコープであるため、それが関連しているかどうか、またはそれらがどのように切り替えられてランタイムとして含まれるかはわかりません。

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ name_removed ---
...
[INFO] +- org.jboss.arquillian.extension:arquillian-seam2:jar:1.0.0.Alpha2:test
[INFO] |  \- org.jboss.shrinkwrap:shrinkwrap-extension-descriptors:jar:1.0.0-beta-6:test (version managed from 1.0.0-beta-5)
[INFO] +- org.jboss.arquillian.protocol:arquillian-protocol-servlet:jar:1.0.0.Final:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-spi:jar:1.0.0.Final:test
[INFO] |  |  +- org.jboss.arquillian.config:arquillian-config-api:jar:1.0.0.Final:test
[INFO] |  |  \- org.jboss.arquillian.config:arquillian-config-impl-base:jar:1.0.0.Final:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-api:jar:1.0.0.Final:test
[INFO] |  \- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-spi:jar:2.0.0-alpha-2:runtime
[INFO] |     \- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api-base:jar:2.0.0-alpha-2:runtime (version managed from 1.2.0-alpha-1)

[INFO] +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api-maven:jar:1.0.0-beta-6:test (scope not updated to runtime)
[INFO] +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:jar:1.0.0-beta-6:test (scope not updated to runtime)
[INFO] |  +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api:jar:1.0.0-beta-6:test
[INFO] |  +- org.sonatype.aether:aether-api:jar:1.8:test
[INFO] |  +- org.sonatype.aether:aether-util:jar:1.8:test
[INFO] |  +- org.sonatype.aether:aether-connector-wagon:jar:1.8:test
[INFO] |  |  +- org.sonatype.aether:aether-spi:jar:1.8:test
[INFO] |  |  \- org.codehaus.plexus:plexus-container-default:jar:1.5.5:test
[INFO] |  |     +- org.codehaus.plexus:plexus-classworlds:jar:2.2.2:test
[INFO] |  |     +- org.apache.xbean:xbean-reflect:jar:3.4:test
[INFO] |  |     |  \- commons-logging:commons-logging-api:jar:1.1:test
[INFO] |  |     \- com.google.collections:google-collections:jar:1.0:test
[INFO] |  +- org.apache.maven:maven-aether-provider:jar:3.0.1:test
[INFO] |  |  +- org.apache.maven:maven-model:jar:3.0.1:test
[INFO] |  |  +- org.apache.maven:maven-model-builder:jar:3.0.1:test
[INFO] |  |  +- org.apache.maven:maven-repository-metadata:jar:3.0.1:test
[INFO] |  |  +- org.sonatype.aether:aether-impl:jar:1.8:test
[INFO] |  |  +- org.codehaus.plexus:plexus-component-annotations:jar:1.5.5:test
[INFO] |  |  \- org.codehaus.plexus:plexus-utils:jar:2.0.4:test
[INFO] |  +- org.apache.maven:maven-settings-builder:jar:3.0.1:test
[INFO] |  |  +- org.codehaus.plexus:plexus-interpolation:jar:1.14:test
[INFO] |  |  +- org.apache.maven:maven-settings:jar:3.0.1:test
[INFO] |  |  \- org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3:test
[INFO] |  |     \- org.sonatype.plexus:plexus-cipher:jar:1.4:test
[INFO] |  +- org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-7:test
[INFO] |  +- org.apache.maven.wagon:wagon-file:jar:1.0-beta-7:test
[INFO] |  \- org.apache.maven.wagon:wagon-http-lightweight:jar:1.0-beta-7:test
[INFO] |     \- org.apache.maven.wagon:wagon-http-shared:jar:1.0-beta-7:test
[INFO] \- org.jboss.shrinkwrap:shrinkwrap-impl-base:jar:1.0.0:test (scope not updated to runtime)
[INFO]    \- org.jboss.shrinkwrap:shrinkwrap-spi:jar:1.0.0:runtime (scope managed from test)
[INFO]       \- org.jboss.shrinkwrap:shrinkwrap-api:jar:1.0.0:runtime
4

3 に答える 3

4

これは、Arquillianが使用するBOMの問題だったようです。

https://issues.jboss.org/browse/ARQ-889

修正バージョンに更新しましたが、すべて順調です。

于 2012-06-19T18:36:32.570 に答える
3

不要な5つのシュリンクラップjarは、テストスコープの依存関係のすべての依存関係です。ただし、dependencyManagementセクションでshrinkwrap-spiは、、、shrinkwrap-descriptors-spiおよびshrinkwrap-resolver-impl-mavenがランタイムスコープとしてリストされています。私の推測では、これらのランタイム宣言は、推移的な依存関係のテストスコープをオーバーライドします。また、ランタイムスコープは、これらの依存関係の依存関係によって継承されます。

したがってshrinkwrap-spishrinkwrap-descriptors-spidependencyManagementでのランタイム宣言が、明示的なテストスコープの依存関係から推移的に継承されたテストスコープをオーバーライドするために含まれています。これらの2つの依存関係は現在ランタイムスコープであるため、shrinkwrap-apiランタイムshrinkwrap-descriptors-api-baseになります。shrinkwrap-resolver-apiまた、ランタイムスコープは(dependencyManagementのランタイム)から推移的に取得されると思いますshrinkwrap-resolver-impl-mavenが、明示的なテストスコープのためにそれ自体は含まれていません。

ただし、これはほとんど推測であり、空のプロジェクトでいくつかのシュリンクラップ依存関係を使用してさまざまなスコープをテストし、何が解決されたかを確認することで裏付けられています。

、、を必要shrinkwrap-spiとする理由がなく、dependencyManagementでランタイムスコープを設定する必要がない場合は、スコープビットを削除して、パッケージ化を再試行します。何らかの理由でそれらをランタイムスコープにする必要がある場合は、依存関係ブロックで5つのjarを明示的なテストスコープに設定する必要があります。shrinkwrap-descriptors-spishrinkwrap-resolver-impl-maven


編集:

これがデモンストレーションする簡単なプロジェクトです:

pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.group</groupId>
    <artifactId>my-artifact</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>3.0.6.RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>3.0.6.RELEASE</version>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

spring-beansアーティファクトはに依存しspring-coreます。)

次に、実行mvn clean packageして次の出力を取得します。

[INFO] Building war: /home/matts/test/target/my-artifact-0.0.1-SNAPSHOT.war
[DEBUG] adding directory META-INF/
[DEBUG] adding entry META-INF/MANIFEST.MF
[DEBUG] adding directory WEB-INF/
[DEBUG] adding directory WEB-INF/classes/
[DEBUG] adding directory WEB-INF/lib/
[DEBUG] adding entry WEB-INF/classes/Test.class
[DEBUG] adding entry WEB-INF/lib/spring-core-3.0.6.RELEASE.jar
[DEBUG] adding entry WEB-INF/lib/spring-asm-3.0.6.RELEASE.jar
[DEBUG] adding entry WEB-INF/lib/commons-logging-1.1.1.jar
[DEBUG] adding entry WEB-INF/web.xml

しかし、POMからセクションを削除しdependencyManagement、戦争を再度作成すると、次の出力が得られます。

[INFO] Building war: /home/matts/test/target/my-artifact-0.0.1-SNAPSHOT.war
[DEBUG] adding directory META-INF/
[DEBUG] adding entry META-INF/MANIFEST.MF
[DEBUG] adding directory WEB-INF/
[DEBUG] adding directory WEB-INF/classes/
[DEBUG] adding entry WEB-INF/classes/Test.class
[DEBUG] adding entry WEB-INF/web.xml

spring-beansテストスコープでしたが、セクションでランタイムスコープに設定したため、まだ戦争に含まれていましたspring-coredependencyManagement

于 2012-06-19T17:16:19.923 に答える
0

依存関係ツリーレポートには、これらのjarの一部の実行時スコープが表示されるため、それらはそれに応じて戦争に含まれます。つまり、実行時に使用できるようになります。効果的なpomは、一部のjarのデフォルトのスコープも示しているため、含まれています。全体として、依存関係の起源を追跡する必要があります。すべての親pomだけでなく、pomの依存関係と依存関係管理セクションを確認してください。

調査を容易にするために、これらの依存関係のいくつかを宣言してテスト戦争プロジェクトを作成します。これにより、pomの一部を段階的に追加および削除して、最終結果にどのように影響するかを確認できます。

于 2012-06-19T14:35:21.077 に答える