如何使Maven/Surefire只在-pl参数指定的模块中运行测试



我有一个多模块的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

相关内容

  • 没有找到相关文章

最新更新