maven - 如何让 Maven/Surefire 仅在 -pl 参数指定的模块中运行测试
问题描述
我有一个多模块 Maven 项目。我经常为单个模块(pl
)加上它的依赖项(-am
)运行 maven:
mvn test -pl module -am
这也将开始对所有依赖项运行测试。有没有办法告诉 Surefire 只运行 module/s 中的测试(在上面的示例中由-pl
参数指定的一个/s module
)并跳过使用该-am
选项收集的所有模块中的所有测试。
笔记:
- 我不能使用测试白名单,
-Dtest=...
因为该包确实保证不会执行来自另一个模块的测试。 - 如果我不使用该
-am
选项,构建将失败,因为无法找到来自同一项目的依赖项(并且由于我处于 Dockerized 环境中,因此我没有缓存中的工件.m2/repository
)
解决方案
我在我的脚本中应用了以下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>
推荐阅读
- java - Java 循环。什么更快?
- java - 使用 onOptionsItemSelected 显示/隐藏 Searchview
- javascript - 如何在flask的html网页中播放mp3文件?
- java - 如何在反应堆通量排序之前获得订单
- jquery - 使用 EasyAdmin 3.3 过滤器的自动完成选项
- postman-pre-request-script - 如何从邮递员中另一个请求的预请求选项卡运行 GET 和 POST 请求?
- flutter - Flutter web - 构建后颜色不一致
- python - 映射使用 python 生成的图形中的最低点
- bash - 从字符串中排除某个字符之后的所有内容
- python - 创建数据框列表