代码之家  ›  专栏  ›  技术社区  ›  tpdi

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

  •  34
  • tpdi  · 技术社区  · 14 年前

    Maven的Surefire(测试)插件 mvn test-compile 将文件复制到 src/test/resources target/test-classes . 它编译 .java 在里面 src/test/java ,并复制 .class 文件到 目标/测试类 .

    但它不会从 src/test/java语言 ,并且能够将测试资源与 .java语言 它们是资源的类,而不是 src/测试/资源 .

    是否可以让Maven从 src/test/java语言 ?

    4 回复  |  直到 6 年前
        1
  •  19
  •   bmargulies    14 年前

    资源复制都是由maven资源插件完成的,如果您阅读了其中的文档,您将看到如何从src/test/java添加资源复制。

    http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html 用于测试资源目标,该目标包含在默认生命周期中。

    然后看看 http://maven.apache.org/pom.html ,并寻找 <testResources> .

        2
  •  39
  •   assylias    6 年前

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

    <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/测试/资源 .

    所以我们再加上 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/test/resources (和子目录) src/测试/资源 版本是最终 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>
    
        3
  •  2
  •   Gerold Broser    6 年前

    当我将测试配置放入 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>
    
        4
  •  0
  •   javamonkey79    14 年前

    有可能让maven复制 src/test/java的资源?

    是的,这很容易用 antrun plugin .