如何仅针对源码变更的Maven子模块运行单元测试?
多模块Maven项目测试执行方案
一、修改ChildA后仅运行其及子模块的测试
直接用Maven的模块选择参数-pl指定目标模块即可,ChildA作为父模块,Maven会自动递归处理它的子模块:
mvn verify -pl ChildA
如果需要更精确指定(比如ChildA是纯pom模块),也可以直接列出所有目标模块:
mvn verify -pl ChildA,ChildA/GrandChildAA,ChildA/GrandChildAB
另外还能通过排除其他模块的方式实现:
mvn verify -pl !ChildB,!ChildB/GrandChildBA,!ChildB/GrandChildBB
二、仅对重新编译的模块运行单元测试
Maven默认的增量编译会跳过无源码变更模块的编译,但测试阶段默认仍会执行所有模块的测试。要实现仅对重新编译模块跑测试,最简便的方式是结合上面的模块选择参数:修改源码后,用-pl指定变更模块(及其子模块)执行verify,Maven只会编译有变更的模块,并仅运行这些模块的测试,完全匹配你的需求。
如果需要更自动化的方式(无需每次手动指定模块),可以结合buildnumber-maven-plugin追踪源码变更,再配置maven-surefire-plugin做条件化测试执行,但这种配置相对复杂,日常使用推荐直接用-pl指定模块的方式,简单高效。
内容的提问来源于stack exchange,提问作者davidalayachew
相关产品推荐
相关产品推荐

