40

Maven 的 Surefire(测试)插件mvn test-compile将文件复制src/test/resourcestarget/test-classes. 它编译.javasrc/test/java并将编译后的.class文件复制到target/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/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>
于 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 回答