我有一个多模块的maven项目。在子模块中,故障安全插件用于运行集成测试。一些参数线是相应地定义的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<skipAfterFailureCount>1</skipAfterFailureCount>
<argLine>-Xmx2048M -Xss512M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC</argLine>
</configuration>
</plugin>
问题是当我以 mvn test
或 mvn integration-test
运行测试时,参数线既不应用于父 pom 目录也不应用于子 pom 目录中的测试,但是如果我从两个目录中mvn failsafe:integration-test
运行测试,则应用 arglines 参数。
这背后的原因是什么?当我使用命令运行测试时,有什么方法可以应用这些参数mvn test
?我尝试通过命令行传递参数作为mvn test -Dchild.argline="-Xmx2048M -Xss512M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC"
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<skipAfterFailureCount>1</skipAfterFailureCount>
<argLine>${child.argline}</argLine>
</configuration>
</plugin>
但它没有用。
我还尝试将测试和集成测试阶段绑定到故障安全集成测试并在那里定义配置参数,但它也没有很好地工作。
我相应地设置了MAVEN_OPTS,但它没有帮助......
failsafe
插件目标不包含在生命周期中。POM 配置必须包含它。有关示例,请参阅此SO答案。还要确保插件定义位于<plugins>
部分中,而不是在<pluginManagement>
元素中。
至于如何在 POM 中定义选项 - 使用文档中提供的名称。因此,要指定argLine
,请添加
<argLine>...</argLine>
在插件配置中。若要在命令行上指定,请注意要设置的值的"用户属性"。对于故障安全插件的argLine
,用户属性也是argLine
,所以在命令行上指定
-DargLine=...
Maven对child.argline
一无所知,所以默默地忽略了它。另请注意,属性和用户属性名称区分大小写。