将 Spring Boot 2.5 升级到 3.0 时,我遇到了 Wiremock 的一些问题,可能是由于迁移到 jakarta 命名空间所致。即使升级到最新的
wiremock-jre8
,即 2.35.0
(截至 2022 年 12 月)似乎也没有帮助。我收到此错误:
java.lang.NoClassDefFoundError: javax/servlet/DispatcherType
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)
at com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory.getServerConstructor(JettyHttpServerFactory.java:37)
at com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory.<clinit>(JettyHttpServerFactory.java:30)
看起来这是一个与 jakarta 命名空间和 Jetty 11 支持相关的已知问题,需要一段时间才能正确修复:
https://github.com/wiremock/wiremock/issues/1760
如问题中所示,使用
wiremock-jre8-standalone
而不是 wiremock-jre8
有助于解决该问题,直到它在 Wiremock 3.x 中得到正确修复
编辑,2023 年 10 月:这些现已可用并且应该有所帮助:
例如Wiremock 版本 1.58 可以与 Spring Boot 3 结合使用(如果您不介意使用旧版本)
使用
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8-standalone</artifactId>
<version>3.0.1</version>
</dependency>
或者对于 Spring boot 3:
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock-standalone</artifactId>
<version>3.3.1</version>
</dependency>
您也可以使用wiremock 3.0.0-beta2+版本来解决该问题。我刚刚测试过。