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

使用WireMock做集成测试报错找不到ALPN Processors如何解决?

问题解决方案

核心原因是spring-cloud-contract-wiremock 默认内置了shade重命名后的Jetty组件,报错日志中的wiremock.org.eclipse.jetty前缀也可以验证这一点:你单独引入的未重命名的jetty-alpn-server依赖类路径是org.eclipse.jetty.*,和WireMock内部使用的Jetty完全不互通,所以添加后不会生效。

JDK11已经内置ALPN支持,你不需要引入alpn-boot扩展,按以下方案处理即可:

  • 方案一(优先推荐,无侵入):禁用WireMock的HTTP/2能力,如果你的测试不需要用到HTTPS、HTTP/2的打桩场景,直接修改WireMock的自动配置注解即可绕过ALPN组件加载:
    把@AutoConfigureWireMock修改为:
    @AutoConfigureWireMock(httpsPort = -1, properties = ["wiremock.http2.enabled=false"])
    
    不需要修改任何依赖,即可快速解决问题。
  • 方案二(需要适配版本):引入对应版本的WireMock standalone包,删除你之前添加的jetty-alpn-server依赖,新增和当前Spring Cloud Contract依赖的WireMock版本对齐的standalone包:
    testImplementation("com.github.tomakehurst:wiremock-jre8-standalone:<你的WireMock版本号>")
    
    standalone包已经内置了所有需要的ALPN适配组件,会自动覆盖spring-cloud-contract-wiremock的默认依赖,解决类缺失问题。
  • 方案三(适配自定义Jetty场景):如果你的项目本身就依赖Jetty作为服务容器,你可以排除spring-cloud-contract-wiremock内置的shade版WireMock,单独引入非shade版的WireMock和版本对齐的Jetty全家桶组件,保证所有Jetty相关依赖版本完全一致即可。

另外需要验证CI环境的JDK发行版:本地运行正常CI失败很可能是CI使用了精简版OpenJDK,移除了内置的ALPN实现,建议将CI环境的JDK替换为Eclipse Temurin、Oracle JDK等标准JDK11发行版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:02