Maven 2 Maven-在执行测试时将目录添加到类路径

Maven 2 Maven-在执行测试时将目录添加到类路径,maven-2,Maven 2,我的项目中的Junits需要从类路径加载属性文件。如何指定这些属性文件的目录,以便Maven在运行测试之前在类路径中设置该目录?您可以使用指定其他测试资源目录,如下所示。使用以下配置,测试资源目录的内容将在生成测试源阶段复制到目标/测试类目录: org.codehaus.mojo 构建助手maven插件 1.12 添加测试资源 生成测试源 添加测试资源 路径/到/附加/测试/资源 **/要排除的文件夹/** 如果您只想将属性文件放在磁盘上的某个位置,而不想在构建期间将这些属性文件复制到目标/测

我的项目中的Junits需要从类路径加载属性文件。如何指定这些属性文件的目录,以便Maven在运行测试之前在类路径中设置该目录?

您可以使用指定其他测试资源目录,如下所示。使用以下配置,测试资源目录的内容将在生成测试源阶段复制到目标/测试类目录:


org.codehaus.mojo
构建助手maven插件
1.12
添加测试资源
生成测试源
添加测试资源
路径/到/附加/测试/资源
**/要排除的文件夹/**

如果您只想将属性文件放在磁盘上的某个位置,而不想在构建期间将这些属性文件复制到目标/测试类,那么可以这样做

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <additionalClasspathElements>
      <additionalClasspathElement>/add/this/to/path</additionalClasspathElement>
    </additionalClasspathElements>
  </configuration>
</plugin>

org.apache.maven.plugins
maven surefire插件
/将/this/添加到/path

为什么不直接使用
测试/资源
并从该点开始将属性放在类路径中呢。它们只在测试阶段出现。

如果您有多个资源环境,您可以使用maven概要文件,并根据您正在测试的概要文件放置各种资源

test/resources/uat
test/resources/prod
test/resources/dev

但是通常,如果您需要进行集成测试,那么您不需要构建助手maven插件。

maven资源插件有一个允许您复制资源的
copy resources
目标。例如:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
      <execution>
        <id>additional-resources</id>
        <phase>process-test-resources</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
          <resources>
            <resource>
              <directory>${project.basedir}/conf</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

org.apache.maven.plugins
maven资源插件
2.6
额外资源
过程测试资源
复制资源
${project.build.testOutputDirectory}
${project.basedir}/conf

这将把项目基础中的
conf
文件夹的内容复制到
target/test classes
文件夹中(除非您修改了project.build.testOutputDirectory),该文件夹将在单元测试期间添加到类路径中。

您还可以添加新的测试资源文件夹

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

${project.basedir}/src/test/resources
${project.basedir}/src/test/something\u other

第一个路径,
src/test/resources
,是默认路径。假设您仍然希望使用默认路径,请确保包含该路径。(testResources标签覆盖默认值,因此如果您没有明确包含默认路径,它将停止使用。)

一个文件夹只有一个这样的文件夹,但通常有多个测试环境。如果您有一个多模块maven项目,您可能需要一个公共测试数据,它将在多个模块的类路径上可用。不幸的是,当从Eclipse运行测试时,m2e没有选择Surefire的配置。太糟糕了,因为这比build helper maven插件的添加测试资源目标要简单一点。这在功能上并不重要,但为了有序,该阶段不应该是生成测试资源而不是生成测试源吗?您似乎在
阶段有一个输入错误
s/添加测试源/添加测试资源/否则它仍然可以工作,但在语义上更正确。这对我来说很有效+感谢您指出默认设置的必要性。这正是我想要的,谢谢!比公认的
buildhelpermaven插件
解决方案简单得多。对于任何正在寻找好方法的人,也可以将
..
构造添加到maven配置文件中,例如,如果您想为不同的环境指定不同的资源(local/dev/test/prod)。
<build>
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
        </testResource>
        <testResource>
            <directory>${project.basedir}/src/test/something_else</directory>
        </testResource>
    </testResources>
</build>