1. ホーム
  2. maven-2

[解決済み] 複数モジュールプロジェクトにおけるMavenのテスト依存性

2023-04-12 09:17:46

質問

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

モジュール2

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

これは問題なく動作します。私のモジュール3がモジュール1のsrcに依存し、コンパイル時にテストするとします。

モジュール3

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

を実行すると mvn clean install を実行すると、私のビルドはモジュール3まで実行され、モジュール3のところでモジュール1のテストの依存関係を解決できなかったので失敗しました。そこで mvn install を実行した後、モジュール 3 のみに戻って mvn install を実行すると、ビルドされます。どのように私はこれを修正することができますか?

どのように解決するのですか?

何をしようとしているのか疑問ですが、あるプロジェクト(module1)用に作成したテストを別のプロジェクトで再利用したいのだと仮定します。の一番下の注意書きで説明されているように、このテストは 付属のテストを使用するためのガイド :

なお、以前の版では、このガイドでは <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>