HttpClient NoClassDefFoundError

时间:2010-07-12 18:41:54

标签: java classpath httpclient classnotfound

我正在尝试从HttpClient 4.0.1运行示例应用程序。它是示例部分中的ClientMultiThreadedExecution.java文件。我在类路径中输入了这些文件:apache-mime4j-0.6.jar; commons-codec-1.3.jar; commons-logging-1.1.1.jar; httpclient-4.0.1.jar; httpcore-4.0.1.jar; httpmime-4.0.1.jar并且文件正确编译。在运行时,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

我错过了参考?这似乎是一个类路径错误,但我无法弄清楚要包含哪个jar文件?提前感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

该类位于httpclient-4.0.1.jar中(我刚刚下载它以确定)所以我怀疑你没有把它放在类路径中。

您如何编译和运行代码?

答案 1 :(得分:5)

此异常表示运行时类路径中缺少所提到的类。

有多种方法可以指定运行时类路径,具体取决于您执行程序的方式。由于一个体面的IDE从你的手中透明地接受这一切,我打赌你在命令提示符下运行它。

如果您通过java.exe -jar将其作为JAR文件运行或双击该文件,则需要在JAR的Class-Path文件的MANIFEST.MF条目中指定类路径。请注意,每当您执行JAR时,%CLASSPATH%环境变量以及-cp-classpath参数都会被忽略

如果您在java.exe之前将其作为“普通的”Java应用程序运行,则需要在-cp-classpath参数中指定它。请注意,无论何时使用此参数,%CLASSPATH%环境变量都会被忽略

无论哪种方式,类路径都应该存在一个(半)冒号分隔的JAR文件路径(绝对路径或相对于当前工作目录)。 E.g。

java -cp .;/path/to/file1.jar;/path/to/file2.jar com.example.MyClass

(如果您使用的是Unix / Linux,请使用冒号而不是分号作为路径分隔符)

答案 2 :(得分:2)

在cloudera-quickstart-vm-5.8.0中运行Eclipse Luna 2(4.4.2)我必须添加以下内容

  • Apache的httpcomponents-httpcore.jar
  • 的HttpClient-4.5.3.jar
  • HttpClient的缓存-4.5.3.jar

......然后它没有错误地工作

答案 3 :(得分:0)

当我遇到这个问题时,结果发现当我将Fluent API添加为Maven依赖项时,它导入的HTTPClient API的版本与我已经使用的版本不同。这两个版本的API都打包在生成的JAR的lib文件夹中。版本冲突是导致此错误的原因。

向类路径添加条目将解决问题,因为您只需手动指定要使用的版本。但是,要修复底层问题,我只需要在重建之前删除我的目标文件夹(或运行maven clean)。这删除了任何“缓存”库JAR,并在下一个版本中,只重新下载了正确的库。

希望能帮助别人!