Maven Failsafe插件中显式定义默认目标是否必要?
Maven Failsafe插件:是否需要显式配置integration-test和verify目标?
结论先给:如果只是用Failsafe的默认功能,显式配置这两个目标确实是冗余操作。
原因很简单:Maven的Failsafe插件本身已经预设了生命周期绑定——它的integration-test目标会自动绑定到Maven生命周期的integration-test阶段,verify目标会自动绑定到verify阶段。只要你在pom.xml里声明了这个插件(哪怕只写基础的插件坐标,不加任何executions配置),运行mvn verify时,这两个目标就会自动触发执行,和你显式写executions的效果完全一样。
那什么时候需要显式配置?只有当你需要修改目标的默认行为时才有必要:
- 自定义集成测试类的匹配规则(默认是
**/*IT.java,你想额外匹配**/*IntegrationTest.java) - 给测试目标添加额外的系统属性、JVM参数
- 跳过某个阶段的执行,或者调整目标的执行顺序
- 配置多环境下的不同测试规则
举个例子,默认的插件声明就足够满足基础需求:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.2.5</version> </plugin>
运行mvn verify,integration-test和verify目标会自动执行。
但如果要自定义测试规则,这时候显式配置executions就很有必要:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.2.5</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <includes> <include>**/*IT.java</include> <include>**/*IntegrationTest.java</include> </includes> <systemPropertyVariables> <env>test</env> </systemPropertyVariables> </configuration> </execution> </executions> </plugin>
回到你的问题:网上的示例代码显式配置这两个目标,要么是为了演示自定义配置的写法,要么是作者习惯把默认行为显性化(虽然没必要)。如果你不需要修改默认逻辑,完全可以删掉这段executions配置,执行效果不会有任何变化。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

