Maven中Failsafe插件同时配置integration-test和verify目标的含义
嗨,刚接触Maven的话,确实容易搞混这些插件目标~我来给你拆解一下这俩<goal>到底是干啥的,以及为啥要同时配置它们:
首先得明确:maven-failsafe-plugin是专门用来运行集成测试的插件,和负责单元测试的maven-surefire-plugin分工不同,集成测试一般是需要启动应用、依赖外部服务(比如数据库)这类更复杂的测试场景。
接下来逐个看这两个目标:
<goal>integration-test</goal>:这个目标的核心作用是执行所有集成测试用例。但它有个特点:就算测试用例失败了,它不会立刻终止Maven构建流程,只会把测试失败的结果记录下来,继续执行后续的生命周期阶段(比如打包)。这是因为集成测试之后可能还有一些清理工作要做(比如关闭测试用的数据库连接、停止容器),所以它不会直接让构建失败。<goal>verify</goal>:这个目标的作用是校验集成测试的执行结果。它会去检查integration-test阶段生成的测试报告,如果发现有测试失败的情况,就会立刻让整个Maven构建失败,阻止后续的打包、安装等操作。同时,它还会生成更详细的测试报告文件,默认存放在target/failsafe-reports目录下,方便你排查问题。
为什么要同时声明这两个目标?
单独配置integration-test的话,会出现一个很尴尬的情况:就算集成测试全挂了,Maven还是会把项目打包甚至安装到本地仓库,这显然不符合我们的预期——集成测试没通过的代码,根本不应该被发布或使用。而加上verify之后,就能确保只有当所有集成测试都通过时,构建才会顺利完成。
另外补充一点:这两个目标默认会绑定到Maven生命周期的同名阶段(integration-test阶段在package之后,verify在integration-test之后),所以当你执行mvn verify或者mvn install这类命令时,会自动依次执行这两个目标的逻辑。
举个实际的例子:当你运行mvn verify,流程是这样的:
- 完成编译、打包
- 执行
integration-test目标,跑集成测试 - 执行
verify目标,检查测试结果——如果有失败,构建终止;如果全部通过,继续完成后续步骤
最后再把你贴的配置用标准格式放一下,方便对照:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.21.0</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> [...] </project>
内容的提问来源于stack exchange,提问作者L RodMrez

