HttpClient NoClassDefFoundError

2022-09-03 14:53:53

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


答案 1

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

有几种方法可以指定运行时类路径,具体取决于执行程序的方式。由于一个体面的IDE会从您的手中透明地获取所有这些内容,因此我敢打赌您正在命令提示符下运行它。

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

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

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

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

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


答案 2

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

您如何编译和运行代码?


推荐