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

Maven Build Cache Extension无代码变更仍执行测试,如何配置跳过?

解决Maven Build Cache Extension不缓存Surefire/Failsafe测试的问题

默认配置下,maven-build-cache-extension不会自动缓存surefire:test和failsafe:integration-test这类测试目标——因为这类目标的输入输出范围需要手动明确声明,插件才能识别哪些变更需要触发测试重跑,哪些情况下可以直接复用缓存结果。你需要在项目根POM中添加自定义缓存规则,具体步骤如下:

1. 添加测试目标的缓存规则

在根POM的<build>节点下扩展插件配置,明确测试目标的输入(依赖的代码、测试类、配置文件)和输出(测试报告、插件生成的临时文件):

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.extensions</groupId>
      <artifactId>maven-build-cache-extension</artifactId>
      <version>1.3.0</version> <!-- 建议使用最新稳定版本 -->
      <configuration>
        <cache>
          <rules>
            <!-- 配置Surefire单元测试的缓存规则 -->
            <rule>
              <id>surefire-test-cache</id>
              <goal>surefire:test</goal>
              <input>
                <includes>
                  <include>src/main/java/**/*</include>
                  <include>src/test/java/**/*</include>
                  <include>src/test/resources/**/*</include>
                  <include>pom.xml</include>
                </includes>
              </input>
              <output>
                <includes>
                  <include>target/surefire-reports/**/*</include>
                  <include>target/surefire/**/*</include>
                </includes>
              </output>
            </rule>
            <!-- 配置Failsafe集成测试的缓存规则 -->
            <rule>
              <id>failsafe-test-cache</id>
              <goal>failsafe:integration-test</goal>
              <input>
                <includes>
                  <include>src/main/java/**/*</include>
                  <include>src/test/java/**/*</include>
                  <include>src/test/resources/**/*</include>
                  <include>pom.xml</include>
                </includes>
              </input>
              <output>
                <includes>
                  <include>target/failsafe-reports/**/*</include>
                  <include>target/failsafe/**/*</include>
                </includes>
              </output>
            </rule>
          </rules>
        </cache>
      </configuration>
    </extension>
  </extensions>
</build>

2. 验证缓存效果

配置完成后先执行一次完整构建生成缓存:

mvn clean install

之后不修改任何代码、配置文件,再次执行构建:

mvn install

如果配置生效,日志中会出现[INFO] CACHED SUCCESS for surefire:test或[INFO] CACHED SUCCESS for failsafe:integration-test的提示,说明测试目标已被缓存跳过。

3. 特殊场景处理

  • 如果测试依赖外部动态资源(比如数据库、第三方API),这类依赖无法被插件识别为静态输入,即使配置了缓存规则,测试可能仍会执行。这种场景下,无变更时可手动跳过测试:mvn install -DskipTests -DskipITs
  • 多模块项目中,根POM的配置会自动继承到所有子模块,无需在子模块重复配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:00:06