首页 文章

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

提问于
浏览
32

Maven的surefire(测试)插件将src / test / resources中的文件复制到target / test-classes . 它在src / test / java中编译.java,并将编译的.class文件复制到target / test-classes .

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

是否有可能让maven从src / test / java复制资源?

4 回答

  • 33

    资源复制全部由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> .

  • 18

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

    <testresources> 可以添加到maven 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,它想要复制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版本是结束的版本在测试课程中 .

    现在我们只需要不复制.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>
    
  • 1

    当我将测试配置放入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>
    
  • 0

    是否有可能让maven从src / test / java复制资源?

    是的,使用antrun plugin很容易实现 .

相关问题