9

プロジェクト A と B があり、B は A を必要とします。プロジェクト内の AI には、JUnit テストでのみ使用できるユーティリティ クラスの UC があるため、src/test/javaプロジェクト A に常駐します。AI でテストを記述している限り、アクセスできますUC。ただし、Maven を実行して B でテストを実行する場合、B では UC にアクセスできないため、コンパイラ エラーが発生します。

明らかに、Eclipse は何かをコンパイルするときにすべてのソース フォルダーにすべてのクラスを含めます (つまり、B でテストを作成するときに UC を認識します) が、Maven は A の最終バージョンですべてのテスト クラスを削除します。

私の質問はこれです: Maven でテストを実行するときに、B で UC にアクセスできるようにするにはどうすればよいですか?

私はMavenを初めて使用することを理解してください。同様の質問が寄せられていると思います。しかし、そこに書かれていることを自分の問題に変換して修正することはできません。

私がやろうとしていることは明らかだと思います...

4

3 に答える 3

7

もう少し調べた後、最終的に解決策を見つけました:

http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html 1

このパターンは他の質問でも時々見たことがあるので、そのように理解していなかっただけだと思います...ああ、まあ。*アイロール*

1元のリンクが機能しなくなりました。archive.orgで再び見つけました(見苦しいレイアウトは気にしないでください)。

于 2011-02-25T12:22:09.457 に答える
2

maven-jar-plugin ページ ( http://maven.apache.org/plugins/maven-jar-plugin/usage.html ) には、2 つの方法が記載されています。簡単な方法は、test-jar アーティファクトを作成し、それを参照することです。(公式ページから露骨にコピーされたスニペット)

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

そして、それを必要とするプロジェクトで test-jar タイプとテスト スコープでそれを参照します。

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>groupId</groupId>
      <artifactId>artifactId</artifactId>
      <type>test-jar</type>
      <version>version</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>

これを何度も行う必要がある場合は、テスト コードを別のプロジェクトに移動することを検討する必要があります。

于 2013-08-14T07:25:14.270 に答える
0

私はいつもテストジャーがぎこちないことに気づきました。それらは、リポジトリに新しくデプロイされたときにのみ使用されるため、一種の独特です。そうしないと、他のプロジェクトに変更が反映されません。これが、テスト ヘルパーを配置し、テスト スコープの依存関係を使用してそれらを参照するために使用できる通常のプロジェクトのみを作成することをお勧めする理由です。

于 2013-08-14T09:25:39.963 に答える