我出于类似目的使用了maven-remote-resources-plugin 。创建一个 jar 类型的单独资源项目 (com.company:resourceProj)。将 JMeter 资源文件放入/src/main/resources
.
/src/main/resources/common.properties (your filenames obviously)
/src/main/resources/a.properties
etc.
按照示例中的说明创建捆绑包。
现在,将此配置添加到您的父 POM(如果需要,可以在测试配置文件中):
<properties>
<shared.resources.dir>${project.build.directory}/shared-resources</shared.resources.dir>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<executions>
<execution>
<id>load-resources</id>
<phase>initialize</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<resourceBundles>
<resourceBundle>com.company:resourceProj:version</resourceBundle>
</resourceBundles>
<attached>false</attached>
<outputDirectory>${shared.resources.dir}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
现在,告诉 Maven 这些是测试资源。如果您的测试资源元素在模块之间是一致的,那么这也可以在父模块中,如果它们不同,则在模块 POM 中。(根据我在子项目中定义的 Maven 3 资源的经验,优先于父项目;它们没有被合并。)
<testResources>
<testResource>
<directory>${shared.resources.dir}</directory>
<includes>
<include>common.properties</include>
<include>${module.file}.properties</include>
</includes>
</testResource>
<!-- any other test resources here -->
</testResources>
在子模块中,定义资源模块属性(这是模块a):
<properties>
<module.file>a</module.file>
</properties>
调整它以满足您的用例。
- - 编辑 - -
如果将配置放入父 POM,则父 POM 可能无法构建,具体取决于子 POM 提供的配置。当我们构建共享的基础/父项目时,我们不想要求定义所有应该由子项目(继承者)提供的属性。因此,我们在构建共享项目时激活此配置文件以绕过仅适用于儿童的任何内容。
为此,pom-packaging.marker
向父项目的 basedir 添加一个空文件。然后将此配置文件添加到父 POM。构建父项目时,Maven 将找到标记文件,启用配置文件,并禁用配置文件中包含的所有执行。子项目构建时,marker文件不存在,所以POM主体部分的配置才会生效。
我也将这种技术与 Enforcer 插件一起使用 - 父级定义了应该应用于从父级继承的项目的执行器规则,但在构建时不能满足这些规则。如果插件提供“跳过”属性,您可以在此配置文件中启用它,而不是在插件配置中使用 phase = none。
<profile>
<id>pom-packaging</id>
<activation>
<file>
<exists>pom-packaging.marker</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<executions>
<execution>
<id>load-resources</id>
<phase>none</phase> <!-- disables this execution -->
</execution>
</executions>
</plugin>
.... other plugin executions here ....
</plugins>
</build>
</profile>