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

升级Spring Boot至3.3.1后WireMock测试失败问题求助

解决Spring Boot 3.3.1升级后WireMock与Spring Cloud Contract依赖冲突问题

问题根源

你遇到的NoSuchMethodError本质是版本兼容性不匹配:

  • Spring Boot 3.3.1对应的Spring Cloud版本是2023.0.x(代号Leyton),但你使用的spring-cloud-starter-contract-stub-runner:4.1.2属于2022.0.x(Kilburn)分支,仅兼容Spring Boot 3.1.x
  • 旧版Spring Cloud Contract的代码依赖WireMock旧构造方法ResponseTemplateTransformer(boolean),而WireMock 3.x已移除/变更该方法,导致反射调用失败

解决步骤

  1. 对齐Spring Cloud与Spring Boot版本
    引入Spring Cloud 2023.0.x的BOM来统一管理依赖版本,确保所有组件兼容Spring Boot 3.3.1:

    plugins {
        id 'org.springframework.boot' version '3.3.1'
        id 'io.spring.dependency-management' version '1.1.5'
    }
    
    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:2023.0.2"
        }
    }
    
  2. 清理冗余依赖配置
    移除手动添加的WireMock依赖、排除规则和强制版本配置,让Spring Cloud Contract自动引入兼容的WireMock版本:

    dependencies {
        // 仅保留stub-runner依赖,无需手动指定WireMock
        testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'
    }
    
  3. 验证依赖一致性
    执行Gradle命令检查testImplementation的依赖树,确认WireMock版本统一无冲突:

    ./gradlew dependencies --configuration testImplementation
    

    确保输出中只有Spring Cloud Contract引入的WireMock版本,没有旧版wiremock-jre8-standalone或其他冲突版本。

为什么之前的尝试无效?

  • 强制使用WireMock 3.x时,旧版Spring Cloud Contract的代码仍会调用已废弃的构造方法,导致错误
  • 降级到WireMock 2.35.1时,该版本与Spring Boot 3.3.1的类库(如Jakarta EE API)存在兼容性问题,同样会引发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:14