You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Maven Surefire与Failsafe插件目标启停配置的疑问

Maven Surefire与Failsafe插件问题解答

首先明确:你当前的禁用方式是不正确的,注释<goal>integration-test</goal>后仍触发集成测试,核心原因通常有两个:

  • 父POM的继承配置:如果你的项目继承了Spring Boot、Apache等官方/通用父POM,这些父POM里大概率已经默认绑定了Failsafe插件的integration-test目标到对应阶段,你自己POM中的配置属于叠加而非覆盖,父POM的绑定依然生效。
  • 阶段触发逻辑误解:即使你注释了自己配置里的goal,只要存在其他配置(比如父POM)将Failsafe的integration-test目标绑定到integration-test阶段,执行mvn integration-test时就会触发该目标。

正确的禁用方法

临时禁用(单次构建)

无需修改POM,直接在命令行添加参数:

# 仅跳过集成测试执行
mvn integration-test -DskipITs
# 彻底跳过Failsafe插件的所有目标
mvn integration-test -Dmaven.failsafe.skip=true

永久禁用(修改POM)

场景1:覆盖父POM的默认绑定

给execution设置唯一ID,将阶段设为none,彻底取消目标绑定:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <executions>
        <execution>
            <id>custom-failsafe-execution</id>
            <phase>none</phase> <!-- 取消绑定到任何Maven阶段 -->
            <goals>
                <goal>verify</goal> <!-- 若需要保留verify目标可保留,否则删除 -->
            </goals>
        </execution>
    </executions>
    <configuration>
        <trimStackTrace>false</trimStackTrace>
    </configuration>
</plugin>
场景2:完全禁用Failsafe插件

如果不需要Failsafe的任何功能,可直接删除插件配置;或在configuration中全局跳过:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
        <skip>true</skip> <!-- 全局跳过该插件的所有目标 -->
        <trimStackTrace>false</trimStackTrace>
    </configuration>
</plugin>

补充说明

Surefire的test目标是Maven核心默认绑定到test阶段的,因此无需额外配置即可通过mvn test触发;而Failsafe确实没有默认绑定,必须手动配置executions绑定到integration-test和verify阶段——但父POM往往会预先完成这个配置,这也是你注释自身goal后仍能触发测试的关键原因。

内容的提问来源于stack exchange,提问作者Veeraraghavan N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:24:48