简单Apache HttpClient Eclipse项目出现NoClassDefFoundError错误

4

我正在尝试创建一个简单的Eclipse项目来测试使用HttpClient代码的代码。

我在Eclipse中创建了一个普通的Java项目,添加了一个Junit4测试用例(如下所示的代码)。我从Maven Central here手动下载了httpclient-4.1.3.jar并将其添加到了Java构建路径中。

当测试运行时,我收到以下错误:

java.lang.NoClassDefFoundError: org/apache/http/params/HttpParams at HttpClientDemo.test(HttpClientDemo.java:13)

HttpClientDemo只是:

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.Test;


public class HttpClientDemo {
   @Test public void test() {
      HttpClient httpclient = new DefaultHttpClient();
   }
}

为什么会出现这个错误?
1个回答

9

从版本4开始,HttpClient已经被分为三个部分,在HttpComponents名称下:核心,适当的客户端和异步客户端。 HttpParams类现在是HttpComponents Core的一部分,因此您还需要该组件的特定JAR(应该命名为httpcore-4.1.3.jar)才能成功编译您的简单示例。


谢谢!然而,在HttpComponents核心“部分”下我没有看到JAR文件,只有一个pom文件。我没有使用Maven(我尝试安装m2Eclipse来获取Maven支持,但学习曲线非常陡峭)。所以你知道我可能缺少哪个HttpComponents JAR吗? - Jeff Axelrod
1
@glenviewjeff 我不使用Maven,但是从http://hc.apache.org/downloads.cgi页面上可以看到一些HttpCore二进制下载,你可能会感兴趣。 - Giulio Piancastelli
唉,最終發現所有的 Jars 都在從 Apache 的 HttpComponents 網站下載的壓縮“二進制”文件中。啊,我想你比我先找到了它。沒有查看壓縮包內容而浪費了很多精力,我不知道當初想錯了什麼導致我誤入歧途。 - Jeff Axelrod
1
@glenviewjeff 嗯,二进制的意思是:字节码、编译后的代码 - 而不是原始的 Java 源代码。此外,我查看了你提供的 pom.xml 文件,似乎 Maven 直接从 Apache 的 SVN 仓库下载 HttpComponents Core 的源代码。我更喜欢从供应商网站下载全面的二进制文件。 - Giulio Piancastelli
1
对于未来的读者 - 我还必须将 commons-logging-1.1.1.jar 添加到项目中以解决后续错误。 - Jeff Axelrod
多年后,我不得不在我的pom.xml中添加commons-logging来解决从我的CloseableHttpClient引发的NoClassDefFoundError - Zeruno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接