我有2个配置文件可能会或可能不会一起用于运行一组测试。它们每个都需要不同的vmarg来运行,但如果它们一起使用,可以将它们相互附加。
我正在寻找的是一种将argLine设置为其当前值加上我设置的串联的方法。
我希望它像
一样简单<argLine>${argLine} -DnewVMArg</argLine>
我能做些什么来实现这一目标吗?
我试图修复它,导致maven陷入递归循环。它记录在下面。
我最近的尝试是全局定义属性<my.argLines></my.argLines>
,然后在配置文件中对其进行修改。
在每个配置文件中,在属性块中,我将属性覆盖为:
<my.argLines>${my.argLines} -myUniqueToProfileArgs</my.argLines>
在配置文件的每个surefire配置中,我将<argLines>
设置为:
<argLines>${my.argLines}</argLines>
这在逻辑上适合我,但它评估的方式显然不会消失。
答案 0 :(得分:7)
在-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 (...)
答案 1 :(得分:1)
如果您只处理-D系统属性,则可以使用&lt; systemPropertyVariables&gt;而不是&lt; argLine&gt;然后他们会自然地结合起来。其中一个配置文件可能有:
<systemPropertyVariables>
<propertyFromProfile1>value1</propertyFromProfile1>
</systemPropertyVariables>
和第二个档案:
<systemPropertyVariables>
<propertyFromProfile2>value2</propertyFromProfile2>
</systemPropertyVariables>
此外,值得一提的是,这种方法允许您在父poms中覆盖子poms中的各个属性。
答案 2 :(得分:0)
正如您所发现的,财产无法引用自己。
您需要为每个配置文件定义不同的属性,并最终在您的surefire调用中连接它们:
<properties>
<!-- it is a good idea not to use empty or blank properties -->
<first.props>-Dprofile1Active=false</first.props>
<second.props>-Dprofile2Active=false</second.props>
</properties>
...
<!-- surefire configuration -->
<argLine>${first.props} ${second.props}</argLine>
...
<profile>
<id>first</id>
<properties>
<first.props>-myUniqueToProfile1Args</first.props>
</properties>
</profile>
<profile>
<id>second</id>
<properties>
<second.props>-myUniqueToProfile2Args</second.props>
</properties>
</profile>
另请注意非空的默认值。 Maven有一些令人惊讶的处理方式。为了安全起见,请使用无害的非空白默认值(请参阅“Null” versus “empty” arguments in Maven)
答案 3 :(得分:0)
Eclipse:Window - &gt;偏好 - &gt; TestNG - &gt; Maven的 取消选中&#39; argLine&#39;。