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

时间:2009-08-24 21:02:25

标签: maven-2

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

6 个答案:

答案 0 :(得分:33)

您可以使用build-helper-maven-plugin指定其他测试资源目录,如下所示。使用下面的配置,test-resources目录的内容将在 generate-test-sources 阶段复制到target / test-classes目录:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.12</version>
  <executions>
    <execution>
      <id>add-test-resource</id>
      <phase>generate-test-sources</phase>
      <goals>
        <goal>add-test-resource</goal>
      </goals>
      <configuration>
        <resources>
          <resource>
            <directory>path/to/additional/test/resources</directory>
            <excludes>
              <exclude>**/folder-to-exclude/**</exclude>
            </excludes>
          </resource>
        </resources>
      </configuration>
    </execution> 
  </executions>
</plugin>

答案 1 :(得分:33)

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

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

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

答案 2 :(得分:24)

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

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

答案 3 :(得分:7)

为什么不使用test/resources并将属性放在类路径中。他们只会参加测试阶段。

答案 4 :(得分:4)

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

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

但是如果你需要进行集成测试,那么你就不需要build-helper-maven-plugin了。

答案 5 :(得分:2)

maven-resources-plugin有一个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>

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