首页 > 解决方案 > 如何让 Maven/Surefire 仅在 -pl 参数指定的模块中运行测试

问题描述

我有一个多模块 Maven 项目。我经常为单个模块(pl)加上它的依赖项(-am)运行 maven:

mvn test -pl module -am

这也将开始对所有依赖项运行测试。有没有办法告诉 Surefire 只运行 module/s 中的测试(在上面的示例中由-pl参数指定的一个/s module)并跳过使用该-am选项收集的所有模块中的所有测试。

笔记:

标签: maventestingmaven-surefire-plugin

解决方案


我在我的脚本中应用了以下sed解决方法来解决这个问题。基本上,我在项目的所有模块中添加了<skipTests>true</skipTests>配置,但当前模块maven-surefire-plugin的例外(因此是git checkout命令)(下面用变量表示MAVEN_MODULE):

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的部分中添加以下 XML 片段:<plugins>pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

推荐阅读