6

私のセットアップはこれです。私は projectAと、に依存するテストプロジェクトを持っていますA:

A <- A_t

A(およびそのテスト)に依存する他のプロジェクトもあります。

A <- B <- B_t

テストの一部を簡素化するために、以下に基づいてテストを支援する新しいライブラリを導入しますA

A <- Atesthelper

したがってA_t、 (and B_t) は、次のように、このテスト ヘルパーに依存します。

A <- A_t
^    |
|    v
Atesthelper

ただし、Maven プロジェクト (pom.xml) を作成する場合、プロジェクトとそのプロジェクトのテストの両方を同じ pom.xml にバンドルするのが通常のようです。そして、新しい pom.xml を作成しますAtesthelper

したがって、次のようになります。

(A <- A_t)
  ^    |
  |    v
Atesthelper

これは循環依存です。pom.xml で、モジュール自体でAtesthelperはなく、テストビルドターゲットの依存関係のみを指定することは可能ですか?A

したがって、ビルド順序は次のようになります。A、Atesthelper、A_t。つまり、同じ pom で指定されている A と A_t を同時にビルドしないでください。

前もって感謝します。

4

4 に答える 4

7

私の理解が正しければ、あなたの主な目標はテスト クラスを再利用することです。A_t と Atesthelper は Maven プロジェクトではなく、テストです。

src/test/java から jar を作成するように Maven を作成します。http://maven.apache.org/guides/mini/guide-attached-tests.htmlを参照してください

A をビルドすると、A.jar と A-tests.jar が得られます。A-tests.jar には、Atesthelper と A_t が含まれます。

B の依存関係を A-tests.jar に設定します ( <type>test-jar</type>).

于 2014-08-15T07:31:41.213 に答える
1

解決する必要のある問題は、AtesthelperからAへの依存関係です。その後、他のすべてが正常に機能します。AはAtesthelperに依存し、BはAtesthelperに依存し、ABの両方にソースとテストの両方が含まれます。Atesthelperは、 ABの両方のスコープテストに含まれます。それがあなたの目標状態です。

どうやってそこに着くの?Atesthelperが依存しているアイテムを別のプロジェクトに抽出する必要があります。通常、これらはインターフェイスまたはその他の一般的な機能であり、とにかく別のプロジェクトに配置する必要があります。これをACommonと呼びましょう。したがって、ターゲットレイアウトは次のようになります。

ACommon <- Atesthelper
       ^    ^
       |   /
         A (and also B)

Atesthelperはどのよう機能に依存していますか?別のプロジェクト( ACommon )に移動できますか?

于 2012-04-16T15:05:41.343 に答える
0

あなたは POM を貼り付けていませんでした。私があなたのことを正しく理解しているかどうかはわかりませんが、私がどのようにそれを取得したかをお手伝いします. これは非常に一般的なケースで、通常は次のように解決する必要があります。

テストをサポートするアーティファクトAtesthelper(おそらくjarパッケージング) は、すべてのテスト関連のものをsrc/mainディレクトリに配置する必要があります (つまり、 のクラスsrc/main/java、 のリソースsrc/main/resourcesなど) src/test。そのすべての依存関係Aだけでなく、JUnit、EasyMock (テストをサポートするクラスが必要とするすべてのもの) などもcompileスコープで宣言します。これはもちろんデフォルトです。testここでスコープを使用しないでください。最後に inABartifacts で、スコープAtesthelperの依存関係として宣言します。test

その解決策は、私にとって何年もうまく機能します。依存関係についてはクリーンでストレートです(私の<type>test-jar</type>言いたいことがわかっている場合、ベースのソリューションとは対照的に、依存関係は推移的です)。とにかく使うだけ。あなたは幸せになるでしょう;)。

于 2012-04-16T13:36:51.950 に答える