Maven 的 Surefire(测试)插件mvn test-compile
将文件复制src/test/resources
到target/test-classes
. 它编译.java
,src/test/java
并将编译后的.class
文件复制到target/test-classes
.
src/test/java
但它不会.java
从src/test/resources
.
是否可以让 Maven 从中复制资源src/test/java
?
Maven 的 Surefire(测试)插件mvn test-compile
将文件复制src/test/resources
到target/test-classes
. 它编译.java
,src/test/java
并将编译后的.class
文件复制到target/test-classes
.
src/test/java
但它不会.java
从src/test/resources
.
是否可以让 Maven 从中复制资源src/test/java
?
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>
资源复制全部由 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>
.
当我将测试配置放入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>
是否可以让 maven 从 src/test/java 复制资源?
是的,这很容易通过antrun 插件实现。
我遇到了同样的问题。以上都没有为我解决。我的 Pom 有以下内容:
<build>
<outputDirectory>${basedir}/build</outputDirectory>
<directory>${basedir}/dist</directory>
...
我必须删除两者,然后插件才能工作。希望这可以帮助。显然,当您更改输出目录时,插件不喜欢。