我有2个配置文件,这些配置文件可以一起使用或可以不一起运行一组测试。它们每个都需要不同的vmargs来运行,但是如果将它们一起使用,可以将它们彼此附加在一起。

我正在寻找的是一种将argLine设置为其当前值加上我设置的值的串联方式。

我希望它会像

<argLine>${argLine} -DnewVMArg</argLine>


我可以做些类似的事情来做到这一点吗?

我试图对其进行修复,这导致Maven陷入了递归循环。它记录在下面。

我最近的尝试是全局定义属性<my.argLines></my.argLines>,然后在配置文件中进行修改。

在每个概要文件的一个属性块中,我将覆盖属性设置为:

<my.argLines>${my.argLines} -myUniqueToProfileArgs</my.argLines>


在配置文件的每个surefire配置中,我将<argLines>设置为:

<argLines>${my.argLines}</argLines>


这在逻辑上适合我,但是它的评估方式显然不会啮合。

最佳答案

-DnewVMArg内定义默认参数argLine,如下所示:

<properties>
    <customArg/>
    <argLine>${customArg} -DnewVMArg</argLine>
</properties>


定义配置文件参数

<profiles>
    <profile>
        <id>profile1</id>
        <properties>
            <customArg>-DmyUniqueToProfile1Args</customArg>
        </properties>
    </profile>
    <profile>
        <id>profile2</id>
        <properties>
            <customArg>-DmyUniqueToProfile2Args</customArg>
        </properties>
    </profile>
</profiles>


不需要其他插件配置

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <configuration/>
        </plugin>
....


我已经测试了此配置,结果如下。

默认

mvn surefire:test -X


结果

(...)java -jar -DnewVMArg (...)


设定目标

mvn surefire:test -X -Pprofile1


结果

(...)java -DmyUniqueToProfile1Args -DnewVMArg -jar (...)

10-06 13:55