2010-11-19 108 views
32

Maven的surefire(测试)插件将src/test/resources中的文件复制到目标/测试类。它在src/test/java中编译.java,并将编译后的.class文件复制到target/test-classes。Maven(surefire):从src/test/java复制测试资源

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

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

+3

您可以配置Maven来做到这一点,但它是在一般的“更方便”遵循惯例,把资源文件Maven认为他们应该是的。 – Thilo 2010-11-19 02:03:26

+0

但单元约定是将dbunit xml文件放在与使用它们的测试相同的目录中。坦率地说,这对我的团队来说会更容易。这整个意义在于减少编写dbunit测试的痛苦,这些单元确实令人钦佩。 – tpdi 2010-11-19 04:40:45

回答

18

资源复制全部由maven-resource-plugin完成,如果您阅读了其中的文档,您将看到如何从src/test/java添加资源复制。

有关测试资源目标的信息,请参阅http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html,它包含在默认生命周期中。

然后请参阅http://maven.apache.org/pom.html,并查找<testResources>

+0

谢谢。但我还是有点不清楚。我发现我可以在中包含标记,但要复制* test *资源,我需要为插件添加一些内容? – tpdi 2010-11-19 01:39:25

+0

@tpdi请参阅编辑。 – bmargulies 2010-11-19 01:43:06

0

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

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

+0

与添加到testResources相比,我会称之为'简单'。 – bmargulies 2010-11-19 01:43:21

28

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

<testresources>可以添加到maven的POM的<build>节点,就像这样:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    </testResource> 
</testResources> 

那份一切的src/test/java下 - 包括.java源代码,这是我们不想。

它也(如bmargulies只暗示)覆盖并替换标准父POM中默认的<testResources>设置,即所有其他POM继承(除非该继承已更改)。标准父节点复制src/test/resources,因此通过覆盖它,我们不会像往常那样复制,我们不希望这样做。 (特别是,我这样做的全部原因是使用单元,它希望将单元.properties文件复制 - 这对于src/test/resources是(对我来说)。

因此,我们重新添加src /测试/资源:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    </testResource> 
    <testResource> 
    <directory>${project.basedir}/src/test/resources</directory> 
    </testResource> 
</testResources> 

,在顺序拷贝上市,所以,对于文件中都存在/ src目录/ test/java下(和子目录)和/ src目录/测试/资源(和子目录) 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>