使用 Apache HTTP 库在 Java 中加载接口定义时出现运行时错误

Runtime error loading Interface definition in Java using Apache HTTP library

我正在尝试围绕 Java 中的 API 连接制作一个简单的包装器。我正在使用 org.apache.http 库来执行此操作。

我已经下载了以下 jar 文件:

然后我可以成功编译文件:

$ javac -cp "./org.apache.httpclient.jar:./org.apache.httpcore.jar" Api.java

然而,当 运行与 $ java Api 结合时,我收到:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpEntity
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
    at java.lang.Class.getMethod0(Class.java:2866)
    at java.lang.Class.getMethod(Class.java:1676)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity
    at java.net.URLClassLoader.run(URLClassLoader.java:366)
    at java.net.URLClassLoader.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more

[原来问题出在编译后的代码运行;代码已被删除以避免分散对实际问题和解决方案的注意力]

我看不出为什么系统在找到其他import成功的时候,却找不到HttpEntity接口,而且可以编译。如果我删除任何 import 行编译失败并出现未知符号错误。

您是否尝试过 运行 带有“-class路径”的 java。编译时您提供了 class 路径,因此您还需要为 运行 添加 class 路径选项 class 文件。

可以在下面找到更多详细信息link: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

您还可以使用以下命令打印 classpath 中的库。

java -cp $(for i in lib/*.jar ; do echo -n $i: ; done). com.test.Class

-cp 应包含您 类 所在的目录,例如:

java -cp "./org.apache.httpclient.jar:./org.apache.httpcore.jar:." Api

假设您的 Api.class 在当前目录中。 (如果您使用的是 windows 系统,请将 : 替换为 ; 作为类路径分隔符)