使用系统属性禁用子模块中的单元测试

时间:2014-01-31 10:06:54

标签: unit-testing maven maven-surefire-plugin

在我的场景中,我想在多模块构建期间禁用某些模块的运行单元测试,例如

mvn -Dmaven.test.skip.module1=true -Dmaven.test.skip.module2=true install

module1我可以定义个人资料:

<profile>
    <id>disable-unit-tests</id>

    <activation>
        <property>
            <name>maven.test.skip.module1</name>
            <value>true</value>
        </property>
    </activation>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</profile>

但是当我尝试将它概括并放到父POM时:

<profile>
    <id>disable-unit-tests</id>

    <activation>
        <property>
            <name>maven.test.skip.${project.artifactId}</name>
            <value>true</value>
        </property>
    </activation>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</profile>

没有使用上述命令激活它。

我做错了什么?有没有解决方案?

1 个答案:

答案 0 :(得分:1)

通过属性激活配置文件不能依赖于属性,因为稍后在构建默认模型时会解析属性。

在您的情况下,如果将设置属性“maven.test.skip。$ {project.artifactId}”,则会激活配置文件。

请查看以下说明:http://maven.apache.org/ref/3.1.1/maven-model-builder/

您需要在所有子模块中明确定义配置文件,或使用其他插件(自制)或gmaven / antrun根据另一个插件的存在来设置属性。

更新

gmaven解决方案的示例:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>groovy-maven-plugin</artifactId>
      <version>2.0</version>
      <dependencies>
        <dependency>
          <groupId>org.codehaus.groovy</groupId>
          <artifactId>groovy-all</artifactId>
          <version>2.1.8</version>
        </dependency>
      </dependencies>
      <executions>
        <execution>
          <id>createSkipProperty</id>
          <phase>initialize</phase>
          <goals>
            <goal>execute</goal>
          </goals>
          <configuration>
            <source>
              if (properties["maven.test.skip.${project.artifactId}"])
                project.properties.setProperty("skip.this.module", "true")
            </source>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
  <pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <skipTests>${skip.this.module}</skipTests>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

如果存在maven.test.skip。$ {project.artifactId},则设置skip.this.module属性。此解决方案的优点是,您只需在父级中定义一次。