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
を実行してビルドします。どうすれば修正できますか?
あなたがやろうとしていることには疑問がありますが、別のプロジェクト(モジュール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>
パスカルの質問に対する私のコメントに関して、私は適切な答えを見つけたと思います:
<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を作成し、パッケージフェーズの後だけでなく、テストのコンパイルフェーズでも使用できるようにします。
私のために働く。
https://maven.Apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html のように:
テストクラスを含むjarの作成方法テストクラスを含むjarを作成する場合、おそらくそれらのクラスを再利用する必要があります。これを解決する方法は2つあります。
The easy way
現在のプロジェクトのテストクラスを使用して添付されたjarを作成し、テストスコープの推移的な依存関係を解放します。
The preferred way
テストクラスを使用して別のプロジェクトを作成します。
詳細については、その記事をお読みください。