Java HttpClient NoClassDefFoundError

Java HttpClient NoClassDefFoundError,java,classpath,httpclient,classnotfound,Java,Classpath,Httpclient,Classnotfound,我正在尝试从HttpClient 4.0.1运行一个示例应用程序。它是示例部分中的ClientMultiThreadedExecution.java文件。我将这些文件放在类路径中:apache-mime4j-0.6.jarcommons-codec-1.3.jarcommons-logging-1.1.1.jarhttpclient-4.0.1.jarhttpcore-4.0.1.jarhttpmime-4.0.1.jar文件编译正确。在运行时,我得到以下错误: Exception in thr

我正在尝试从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文件?提前感谢您的帮助。

该类位于httpclient-4.0.1.jar中(我刚刚下载了它以确定),因此我怀疑您没有将其正确地放入类路径中


如何编译和运行代码?

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

有几种方法可以指定运行时类路径,具体取决于您执行程序的方式。由于一个像样的IDE可以透明地从您的手中获取这些信息,我打赌您是在命令提示符下运行它的

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

如果通过
Java.exe
将其作为“普通”Java应用程序运行,则需要在
-cp
-classpath
参数中指定它。请注意,每当使用此参数时,
%CLASSPATH%
环境变量被忽略

无论哪种方式,类路径都应该是JAR文件路径(绝对路径或相对于当前工作目录)的(半)分号字符串。例如

java-cp/path/to/file1.jar/path/to/file2.jar com.example.MyClass
(如果您使用的是Unix/Linux,请使用冒号而不是分号作为路径分隔符)

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

将条目添加到类路径将解决此问题,因为您只是手动指定要使用的版本。然而,为了解决根本问题,我只需要在重建之前删除目标文件夹(或运行maven clean)。这删除了所有“缓存”的库jar,在下一次构建时,只重新下载了正确的库jar

希望这能帮助别人

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

  • apache-httpcomponents-httpcore.jar
  • httpclient-4.5.3.jar
  • httpclient-cache-4.5.3.jar

。。。然后使用Textpad,它就可以正常工作了。它和JAR文件在同一个目录中,我在配置$File-cp中有它。;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它编译良好,但不运行。 java -cp .;/path/to/file1.jar;/path/to/file2.jar com.example.MyClass