web-dev-qa-db-ja.com

マルチモジュールプロジェクトのMavenテストの依存関係

Mavenを使用して、マルチモジュールプロジェクトをビルドします。私のモジュール2は、コンパイルスコープのモジュール1 srcとテストスコープのモジュール1テストに依存しています。

モジュール2-

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>test</scope>
   </dependency>

これは正常に機能します。モジュール3がModule1 srcに依存しており、コンパイル時にテストするとします。

モジュール3-

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>compile</scope>
   </dependency>

mvn clean installを実行すると、モジュール1のテスト依存関係を解決できなかったため、モジュール3までモジュール3で失敗します。次に、モジュール3のみでmvn installを実行し、戻って、親pomでmvn installを実行してビルドします。どうすれば修正できますか?

79
user209947

あなたがやろうとしていることには疑問がありますが、別のプロジェクト(モジュール1)で作成したテストを再利用したいと思います。 添付のテストの使用ガイド の下部にある注で説明されているように:

このガイドの以前の版では、<classifier>tests</classifier>の代わりに<type>test-jar</type>を使用することを提案していることに注意してください。これは現在一部のケースで機能しますが、インストール前のライフサイクルフェーズが呼び出された場合、テストJARモジュールおよびすべてのコンシューマのリアクタビルド中に適切に機能しません。このようなシナリオでは、Mavenはリアクタービルドの出力からではなく、ローカル/リモートリポジトリからテストJARを解決します。どうやら、リポジトリからのJARが古くなったり、完全に失われたりして、ビルドが失敗する可能性があります(cf. MNG-2045 )。

そのため、まず、コンパイル済みのテストをJARにパッケージ化し、一般的な再利用のために展開するには、次のようにmaven-jar-pluginを構成します。

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.Apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.2</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

次に、通常どおりテストJAR成果物をインストール/デプロイします(mvn installまたはmvn deployを使用)。

最後に、テストJARを使用するには、指定されたタイプのtest-jarで依存関係を指定する必要があります。

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>
116
Pascal Thivent

パスカルの質問に対する私のコメントに関して、私は適切な答えを見つけたと思います:

<plugins>
    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.2</version>
        <executions>
            <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
            <phase>test-compile</phase>
        </execution>
        </executions>
        <configuration>
            <outputDirectory>${basedir}\target</outputDirectory>
        </configuration>
    </plugin>
</plugins>

ここにある主な違いは、<phase>タグ。

Test-jarを作成し、パッケージフェーズの後だけでなく、テストのコンパイルフェーズでも使用できるようにします。

私のために働く。

17
Roman

https://maven.Apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html のように:

テストクラスを含むjarの作成方法テストクラスを含むjarを作成する場合、おそらくそれらのクラスを再利用する必要があります。これを解決する方法は2つあります。

  1. The easy way現在のプロジェクトのテストクラスを使用して添付されたjarを作成し、テストスコープの推移的な依存関係を解放します。

  2. The preferred wayテストクラスを使用して別のプロジェクトを作成します。

詳細については、その記事をお読みください。

2
Goofy