web-dev-qa-db-ja.com

Maven(Surefire):src / test / javaからテストリソースをコピーします

MavenのSurefire(テスト)プラグイン_mvn test-compile_は、_src/test/resources_のファイルを_target/test-classes_にコピーします。 _.Java_を_src/test/Java_にコンパイルし、コンパイルした_.class_ファイルを_target/test-classes_にコピーします。

ただし、_src/test/Java_からリソースをコピーすることはありません。また、_.Java_クラスと同じディレクトリにテストリソースを配置できる方が、_src/test/resources_クラスのパラレル階層よりも便利です。 SOMECODE)__。

Mavenに_src/test/Java_からリソースをコピーさせることは可能ですか?

34
tpdi

リソースのコピーはすべてmaven-resource-pluginによって行われます。そのドキュメントを読むと、src/test/Javaからリソースのコピーを追加する方法がわかります。

デフォルトのライフサイクルに含まれるtest-resourcesゴールについては、 http://maven.Apache.org/plugins/maven-resources-plugin/testResources-mojo.html を参照してください。

そして http://maven.Apache.org/pom.html を見て、<testResources>

19
bmargulies

bmarguliesが答えを出しました ですが、詳細を記入してください。

<testresources>は、次のように、プロジェクトのPOMの<build>ノードに追加できます。

 <testResources>
  <testResource>
    <directory>${project.basedir}/src/test/Java</directory>
  </testResource>
 </testResources>

src/test/Javaソースコードを含む.Javaのすべてをコピーしますが、これは望ましくありません。

また、(bmarguliesで示唆されているように)他のすべてのPOMが継承する標準の親POMのデフォルトの<testResources>設定をオーバーライドし、置き換えます(継承が変更されない限り)。標準の親はsrc/test/resourcesをコピーするので、それをオーバーライドすることにより、通常どおりコピーされません。これは望ましくありません。 (特に、これを行う理由は、ユニティルを使用することです。ユニティルでは、unitils.propertiesファイルをコピーする必要があります。それは(とにかく)src/test/resourcesにあります。

そこで、src/test/resourcesを再追加します。

<testResources>
  <testResource>
    <directory>${project.basedir}/src/test/Java</directory>
  </testResource>
  <testResource>
    <directory>${project.basedir}/src/test/resources</directory>
  </testResource>
</testResources>

これはリストされた順序でコピーするため、/src/test/Java(およびサブディレクトリ)と/src/test/resources(およびサブディレクトリ)の両方に存在するファイルの場合、src/test/resourcesバージョンは最終的にtest-classes

ここで必要なのは、not.Javaファイルをコピーするだけです:

<testResources>
  <testResource>
    <directory>${project.basedir}/src/test/Java</directory>
    <excludes>
        <exclude>**/*.Java</exclude>
    </excludes>
  </testResource>
  <testResource>
    <directory>${project.basedir}/src/test/resources</directory>
  </testResource>
</testResources>
38
assylias

テスト構成をsrc/test/resourcesフォルダー(ソースファイルの場合はsrc/test/Javaのアナログ)に置いたときの唯一の方法。このフォルダーのファイルは、テストの実行中にクラスパスにあるtarget/test-classesフォルダーにコピーされます。理由はわかりませんが、次の設定はうまくいきませんでした。

<testResources>
  <testResource>
    <directory>${project.basedir}/src/test/Java</directory>
    <excludes>
        <exclude>**/*.Java</exclude>
    </excludes>
  </testResource>
  <testResource>
    <directory>${project.basedir}/src/test/resources</directory>
  </testResource>
</testResources>
2
Alex Barysevich

Mavenにsrc/test/javaからリソースをコピーさせることは可能ですか?

はい、これは antrunプラグイン で簡単に実現できます。

0
javamonkey79