1. ホーム
  2. java

[解決済み] 複数モジュールのMavenプロジェクトで、モジュール間でsrc/testクラスを共有する

2022-05-29 19:21:23

質問

マルチモジュールのMavenプロジェクトを持っています。 この例のために、2つのモジュールを考えてください。

  • data
  • consumer

モジュール consumer は、モジュール data を依存関係として持っています。

モジュール data はコアクラスの束を宣言しています。 の下にテストがあります。 src/test の下にテストがあり、それらを使用します。 これらのテストは長ったらしいオブジェクトの作成を必要とするので、 これらのオブジェクトを作成するためのいくつかのユーティリティメソッドを持つクラスがあります。 このユーティリティクラス ( SampleDataHelper ) は src/test の階層にあります。

また、いくつかのテストを consumer モジュールで、これらの長ったらしいオブジェクトを作成する必要があります。 私は自分の SampleDataHelper クラス ( data src/test で定義されている) を、私の consumer src/test ツリーに存在するテストの中にあります。 残念ながら、たとえ dataconsumer , consumer の下に存在するクラスは見ることができません。 data src/test .

これに対抗するために、私は以下のようなものを作ろうと思いました。 別の モジュール ( data-test ) に移動し SampleDataHelper をその下に src/main . そして、私なら data-test として テストスコープ の依存関係にあります。 data . 残念ながら、これは循環的な依存関係を導入しています。 datadata-test が、しかし data-test も必要です。 data .

私が思いついた唯一の解決法は、以下のように SampleDataHelper の下に data src/main の下に test パッケージの下に置き、実際のアプリケーションコードがそれを呼び出さないことを望みます。

どのようにすれば私の SampleDataHelper クラスをモジュール間で共有するには を使わずに の下に置くことで src/main ?

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

消費者プロジェクトはデータプロジェクトに依存するため、消費者よりも先にデータをビルドする必要があることをうれしく思います。その結果、提案されたテクニックを使用して のコメントで を使用して、Data プロジェクトに共有したいすべてのテスト コードが含まれていることを確認し、テスト JAR を生成するように POM を構成します。

<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>

Consumer プロジェクトは、通常の Data JAR アーティファクトと、 追加の test-jar アーティファクトの両方に依存することになります。

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>data</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

私は何度もこの方法を使い、うまくいっています。