使用Jetty Client 11.0.0发起请求时遇NoClassDefFoundError问题求助
解决Jetty Client 11.0.0的NoClassDefFoundError问题
错误根源
你遇到的NoClassDefFoundError是因为仅引入了jetty-client的jar包,缺少Jetty运行必需的核心依赖组件。ContainerLifeCycle属于Jetty的核心工具模块,必须将相关依赖jar加入类路径才能正常加载。
解决方案
1. 使用构建工具管理依赖(推荐)
如果用Maven,在pom.xml中添加以下依赖:
<dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> <version>11.0.0</version> </dependency> </dependencies>
Maven会自动下载jetty-client所需的所有传递依赖(包括jetty-util、jetty-io、jetty-http等核心模块),无需手动管理jar包。
如果用Gradle,添加:
dependencies { implementation 'org.eclipse.jetty:jetty-client:11.0.0' }
2. 手动添加依赖jar包
若必须手动管理,需下载以下Jetty 11.0.0版本的jar包,并全部加入项目类路径:
- jetty-client-11.0.0.jar
- jetty-util-11.0.0.jar
- jetty-io-11.0.0.jar
- jetty-http-11.0.0.jar
- jetty-client-transport-11.0.0.jar
3. 修正测试代码的两处问题
原代码存在两个会导致运行错误的问题,需修改:
package currencyconverter; import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; public class urler { public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException, IOException { HttpClient httpClient = new HttpClient(); // 必须启动HttpClient实例才能发起请求 httpClient.start(); // URL必须包含协议头(http://或https://) ContentResponse response = httpClient.GET("http://example.com"); System.out.println(response.getContentAsString()); // 使用完毕后关闭HttpClient,避免资源泄漏 httpClient.stop(); } }
内容的提问来源于stack exchange,提问作者CrummY
相关产品推荐
相关产品推荐

