Maven(Surefire):从src/test/java复制测试资源

tpd*_*pdi 35 resources copy maven maven-surefire-plugin

Maven的Surefire(测试)插件将mvn test-compile文件复制src/test/resourcestarget/test-classes.它编译.javasrc/test/java,并复制编译的.class文件target/test-classes.

但它不会复制资源src/test/java,并且能够将测试资源放在.java与其资源类相同的目录中比在并行层次结构中更方便src/test/resources.

是否有可能让Maven从中复制资源src/test/java

ass*_*ias 39

bmargulies给出了答案,但让我填写一些细节.

<testresources>可以添加到<build>项目的POM 的节点,如下所示:

 <testResources>
  <testResource>
    <directory>${project.basedir}/src/test/java</directory>
  </testResource>
 </testResources>
Run Code Online (Sandbox Code Playgroud)

这会复制所有内容src/test/java- 包括.java我们不想要的源代码.

它也(如bmargulies仅暗示的那样)覆盖并替换<testResources>所有其他POM继承的标准父POM中的默认设置(除非该继承被更改).标准的父副本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>
Run Code Online (Sandbox Code Playgroud)

它按列出的顺序复制,以便对于存在于/src/test/java(和子目录)和/src/test/resources(和子目录)中的文件,src/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>
Run Code Online (Sandbox Code Playgroud)


bma*_*ies 19

资源复制全部由maven-resource-plugin完成,如果您阅读了doc,您将看到如何从src/test/java添加资源复制.

有关测试资源目标,请参阅http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html,该目标包含在默认生命周期中.

然后查看http://maven.apache.org/pom.html,并寻找<testResources>.