测试中的 JettyReactiveClient NoClassDefFoundError
JettyReactiveClient NoClassDefFoundError in tests
为了增强 WebClient 中的日志记录便利性,我们添加了 jetty 反应式客户端:
public Service () {
SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
HttpClient httpClient = new HttpClient(sslContextFactory) {
@Override
public Request newRequest(URI uri) {
Request request = super.newRequest(uri);
return enhance(request);
}
};
this.webClient = WebClient.create().mutate()
.clientConnector(new JettyClientHttpConnector(httpClient))
.build();
}
+--- org.eclipse.jetty:jetty-reactive-httpclient:3.0.4
| +--- org.reactivestreams:reactive-streams:1.0.3
| +--- org.eclipse.jetty:jetty-client:11.0.6 -> 9.4.44.v20210927
| | +--- org.eclipse.jetty:jetty-http:9.4.44.v20210927
| | | +--- org.eclipse.jetty:jetty-util:9.4.44.v20210927
| | | \--- org.eclipse.jetty:jetty-io:9.4.44.v20210927
| | | \--- org.eclipse.jetty:jetty-util:9.4.44.v20210927
| | \--- org.eclipse.jetty:jetty-io:9.4.44.v20210927 (*)
| \--- org.slf4j:slf4j-api:2.0.0-alpha1 -> 1.7.32
..上面的jetty依赖关系树显示了所有相关的jar。构建包含组的 'implementation' 和 'test-Implementation':'org.eclipse.jetty',名称:'jetty-reactive-client',版本:“3.0.4”。它工作正常,但使用 ok-http 进行测试时出现 :
org/eclipse/jetty/client/api/Request$Content
java.lang.NoClassDefFoundError: org/eclipse/jetty/client/ap/Request$Content
测试:
@SpringBootTest(classes = Service.class)
@ActiveProfiles(profiles = {"test", "local"})
class ServiceTest {
@Autowired
private Service service;
@MockBean
private LogHelper logHelper;
private static MockWebServer mockBackEnd;
private static ObjectMapper objectMapper;
}
(为简洁起见省略测试。)
有什么建议吗?
+--- org.eclipse.jetty:jetty-reactive-httpclient:3.0.4
| +--- org.reactivestreams:reactive-streams:1.0.3
| +--- org.eclipse.jetty:jetty-client:11.0.6 -> 9.4.44.v20210927
您指定了 jetty-reactive-httpclient
版本 3.0.4
这需要 Jetty 11 的特定行为。
你不能像那样任意降级Jetty。
如 jetty-reactive-httpclient 的 README 中所述...
https://github.com/jetty-project/jetty-reactive-httpclient/blob/1.1.x/README.md
Reactive Client Versions
Java Min Version
Jetty Min Version
1.1.x
Java 8
Jetty 9.4.x
2.0.x
Java 11
Jetty 10.0.x
3.0.x
Java 11
Jetty 11.0.x
如果您出于某种原因必须坚持使用 Jetty 9,那么您应该坚持使用版本范围 1 中的 jetty-reactive-httpclient。1.x
为了增强 WebClient 中的日志记录便利性,我们添加了 jetty 反应式客户端:
public Service () {
SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
HttpClient httpClient = new HttpClient(sslContextFactory) {
@Override
public Request newRequest(URI uri) {
Request request = super.newRequest(uri);
return enhance(request);
}
};
this.webClient = WebClient.create().mutate()
.clientConnector(new JettyClientHttpConnector(httpClient))
.build();
}
+--- org.eclipse.jetty:jetty-reactive-httpclient:3.0.4
| +--- org.reactivestreams:reactive-streams:1.0.3
| +--- org.eclipse.jetty:jetty-client:11.0.6 -> 9.4.44.v20210927
| | +--- org.eclipse.jetty:jetty-http:9.4.44.v20210927
| | | +--- org.eclipse.jetty:jetty-util:9.4.44.v20210927
| | | \--- org.eclipse.jetty:jetty-io:9.4.44.v20210927
| | | \--- org.eclipse.jetty:jetty-util:9.4.44.v20210927
| | \--- org.eclipse.jetty:jetty-io:9.4.44.v20210927 (*)
| \--- org.slf4j:slf4j-api:2.0.0-alpha1 -> 1.7.32
..上面的jetty依赖关系树显示了所有相关的jar。构建包含组的 'implementation' 和 'test-Implementation':'org.eclipse.jetty',名称:'jetty-reactive-client',版本:“3.0.4”。它工作正常,但使用 ok-http 进行测试时出现 :
org/eclipse/jetty/client/api/Request$Content
java.lang.NoClassDefFoundError: org/eclipse/jetty/client/ap/Request$Content
测试:
@SpringBootTest(classes = Service.class)
@ActiveProfiles(profiles = {"test", "local"})
class ServiceTest {
@Autowired
private Service service;
@MockBean
private LogHelper logHelper;
private static MockWebServer mockBackEnd;
private static ObjectMapper objectMapper;
}
(为简洁起见省略测试。) 有什么建议吗?
+--- org.eclipse.jetty:jetty-reactive-httpclient:3.0.4
| +--- org.reactivestreams:reactive-streams:1.0.3
| +--- org.eclipse.jetty:jetty-client:11.0.6 -> 9.4.44.v20210927
您指定了 jetty-reactive-httpclient
版本 3.0.4
这需要 Jetty 11 的特定行为。 你不能像那样任意降级Jetty。
如 jetty-reactive-httpclient 的 README 中所述...
https://github.com/jetty-project/jetty-reactive-httpclient/blob/1.1.x/README.md
Reactive Client Versions | Java Min Version | Jetty Min Version |
---|---|---|
1.1.x | Java 8 | Jetty 9.4.x |
2.0.x | Java 11 | Jetty 10.0.x |
3.0.x | Java 11 | Jetty 11.0.x |
如果您出于某种原因必须坚持使用 Jetty 9,那么您应该坚持使用版本范围 1 中的 jetty-reactive-httpclient。1.x