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

时间:2010-11-19 01:14:52

标签: maven copy resources maven-surefire-plugin

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

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

是否可以让Maven从src/test/java复制资源?

5 个答案:

答案 0 :(得分:37)

bmargulies gave the answer,但让我填写一些细节。

<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

现在我们只需要复制.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 :(得分: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>

答案 2 :(得分:2)

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

答案 3 :(得分:0)

  

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

是的,这可以通过antrun plugin轻松实现。

答案 4 :(得分:0)

我遇到了同样的问题。以上都不适合我。我的Pom具有以下内容:

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

我必须将两者都删除,然后该插件才能正常工作。希望这可以帮助。显然,当您更改输出目录时,插件并不喜欢。