我有一个多模块的Maven项目。我经常为单个模块(pl
(及其依赖项(-am
(运行maven:
mvn test -pl module -am
这也将开始在所有依赖项上运行测试。有没有办法告诉Surefire只运行模块/s中的测试(由-pl
参数指定的那个/s,在上面的示例中为module
(,并跳过使用-am
选项收集的所有模块中的所有测试。
注:
- 我不能使用
-Dtest=...
来使用测试白名单,因为包确实保证不会执行来自另一个模块的测试 - 如果我不使用
-am
选项,构建将失败,因为找不到来自同一项目的依赖项(而且由于我处于Dockerized环境中,我没有.m2/repository
中缓存工件的奢侈(
我在脚本中应用了以下sed
解决方法来解决这个问题。基本上,我在我的项目的所有模块中添加了maven-surefire-plugin
的<skipTests>true</skipTests>
配置,但我当前模块(下面用变量MAVEN_MODULE
表示(的例外(因此是git checkout
命令(:
echo "==> Forcibly disabling of tests in all dependency modules"
for pom in */pom.xml
do
sed -i '/<plugins>/a <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin>' $pom
done
git checkout "${MAVEN_MODULE}"
其中sed
命令在每个子模块pom.xml
文件的<plugins>
部分添加以下XML片段:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
我用概要文件和属性解决了这个问题。
亲本CCD_ 17
特性
skip.test
-跳过保险和/或故障保护插件skip.x.test
-x
是模块之一,为每个子模块定义
例如,
<properties>
<skip.tests>false</skip.tests>
<skip.x.tests>false</skip.x.tests>
<skip.y.tests>false</skip.y.tests>
<skip.z.tests>false</skip.z.tests>
</properties>
插件配置
将此元素放入surefire和/或故障保护插件执行中。
<skipTests>${skip.tests}</skipTests>
例如,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skipTests>${skip.tests}</skipTests>
</configuration>
</execution>
</executions>
</plugin>
配置文件
定义一个配置文件以仅对指定的模块启用测试。每个模块都需要这个。例如,
模块pom.xml
特性
在模块x
中,将其定义为覆盖skip.tests
属性。
<properties>
<skip.tests>${skip.x.tests}</skip.tests>
</properties>
命令
maven test -pl x -am -Dtest.x