使用 Apache HTTP 库在 Java 中加载接口定义时出现运行时错误
Runtime error loading Interface definition in Java using Apache HTTP library
我正在尝试围绕 Java 中的 API 连接制作一个简单的包装器。我正在使用 org.apache.http
库来执行此操作。
我已经下载了以下 jar 文件:
- org.apache.http httpclient另存为
./org.apache.httpclient.jar
- org.apache.http httpcore另存为
./org.apache.httpcore.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 系统,请将 : 替换为 ; 作为类路径分隔符)
我正在尝试围绕 Java 中的 API 连接制作一个简单的包装器。我正在使用 org.apache.http
库来执行此操作。
我已经下载了以下 jar 文件:
- org.apache.http httpclient另存为
./org.apache.httpclient.jar
- org.apache.http httpcore另存为
./org.apache.httpcore.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 系统,请将 : 替换为 ; 作为类路径分隔符)