在我的场景中,我想在多模块构建期间禁用某些模块的运行单元测试,例如
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>
没有使用上述命令激活它。
我做错了什么?有没有解决方案?
答案 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属性。此解决方案的优点是,您只需在父级中定义一次。