Maven surefire:附加到argLine

时间:2012-12-11 22:26:06

标签: maven maven-3 maven-surefire-plugin

我有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>

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

4 个答案:

答案 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;。