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
复制资源?
答案 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>
...
我必须将两者都删除,然后该插件才能正常工作。希望这可以帮助。显然,当您更改输出目录时,插件并不喜欢。