40

MavenのSurefire(テスト)プラグインはファイルをにmvn test-compileコピーします。でコンパイルし、コンパイルしたファイルをにコピーします。src/test/resourcestarget/test-classes.javasrc/test/java.classtarget/test-classes

ただし、からリソースをコピーすることはありません。また、の並列階層よりも、リソースでsrc/test/javaあるクラスと同じディレクトリにテストリソースを配置できる方が便利です。.javasrc/test/resources

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

4

5 に答える 5

46

bmarguliesが答えを出しましたが、いくつかの詳細を記入させてください。

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

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

これにより、必要のないソースコードsrc/test/javaを含むすべてがコピーされます。.java

また、(bmarguliesがほのめかしているだけであるように)、<testResources>他のすべてのPOMが継承する標準の親POMのデフォルト設定をオーバーライドして置き換えます(継承が変更されない限り)。標準の親はコピーsrc/test/resourcesするので、それをオーバーライドすることによって、通常どおりにコピーされることはありません。これは望ましくありません。(特に、これを行う私の全体的な理由は、ファイルをコピーする必要があるunitilsを使用すること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/resourcessrc/test/resourcesバージョンはで終わるバージョンになりtest-classesます。

ここで、ファイルをコピーする必要はありません。.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>
于 2013-08-06T14:20:23.990 に答える
20

リソースのコピーはすべて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>

于 2010-11-19T01:15:52.303 に答える
3

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>
于 2014-08-15T07:13:47.533 に答える
0

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

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

于 2010-11-19T01:37:35.710 に答える
0

私は同じ問題に遭遇しました。上記のどれも私のためにそれを修正しませんでした。私のPomには次のものがありました。

<build>
  <outputDirectory>${basedir}/build</outputDirectory>
  <directory>${basedir}/dist</directory>
  ...

両方を削除する必要があり、プラグインが機能しました。お役に立てれば。どうやら、あなたが出力ディレクトリを変更するとき、プラグインは気に入らないようです。

于 2020-08-10T12:50:09.553 に答える