Maven:当<groups>已经配置</groups>时,surefire插件会忽略-Dgroups

时间:2013-01-18 21:57:18

标签: java maven junit surefire

我的项目有一些我很少想要运行的JUnit测试。为此,我将它们放在@Category中然后我这样做了:

<plugin>
   <artifactId>maven-surefire-plugin</artifactId>
   <!-- Run all but the inject tests -->
   <configuration>
      <groups>!be.test.InjectTests</groups>
   </configuration>
</plugin>

我想在命令行中覆盖配置以运行Inject测试,如下所示:

mvn clean install -Dgroups=be.test.InjectTests

但是这不起作用,-Dgroups被Maven忽略了。

如果我没有把命令正常工作。

1 个答案:

答案 0 :(得分:6)

不幸的是,如果在pom中设置了某些东西,它就不会被轻易覆盖(如果你明确设置skipTests,那么很难用属性覆盖)......但是! (这有点像黑客攻击)你可以将属性的设置推迟到pom属性,然后在命令行上覆盖它。

<project>
...
<properties>
    <groups>!Slow</groups>
<properties>
....
<build>
    <plugins>
        ...
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
           <version>2.13</version>
           <configuration>
            <groups>${groups}</groups>
           </configuration>
        </plugin>
    </plugins>
</build>
...

有了这个(以及一个快速构建的项目,在OSX上运行,Maven 3.0.4,Java 1.6.0_37):

$ mvn clean test
...
Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
...
$ mvn clean test -Dgroups=Slow
...
Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0