我项目中的Junits需要从类路径加载属性文件。如何指定这些属性文件的目录,以便Maven在运行测试之前在类路径中设置它?
答案 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),该文件夹将在您的单元中添加到类路径中测试