在我的代码目录中,有以下文件:
apache-httpcomponents-httpcore.jar
httpclient-4.0.3.jar
java-json.jar
和一个java源文件:
JSONLoader.java
我在同一目录中执行以下命令:
javac -cp *;. JSONLoader.java
和
java -cp "*;." JSONLoader
第二个命令后出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:159)
at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:178)
at JSONLoader.main(JSONLoader.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
这是java代码文件:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class JSONLoader {
/**
* @param args
*/
public static void main(String[] args) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(
"http://www.espncricinfo.com/netstorage/754739.json");
getRequest.addHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我错过了什么吗?
答案 0 :(得分:2)
下载commons-logging.jar
并将其添加到您的类路径中。
答案 1 :(得分:2)
请从堆栈跟踪中检查此行:
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
这意味着缺少apache commons日志记录(http客户端的依赖关系)。它确实在你的命令行中丢失了。
您必须添加所有依赖项,包括您的第三方及其第三方的依赖关系。
答案 2 :(得分:1)
基本上,当你在运行时没有相应的类时,你会得到ClassNotFoundException。在这里,您缺少apache-httpclient所依赖的apache的日志记录和编解码器jar。请参阅您需要的dependencies。
因此,一旦下载它们,将它们与httpcore jar一起添加到类路径或-cp命令行中,然后重新运行代码。
答案 3 :(得分:0)
有一些错过的jar文件( commons-logging.jar ),您可以从here下载
我希望它会对你有所帮助,最好的问候。
答案 4 :(得分:0)
java.lang.NoClassDefFoundError
表示嗯...没有发现Class Def Found错误。您的代码尝试在某处使用类,但它不存在。在您的情况下,该类是
组织/阿帕奇/公地/记录/的LogFactory
所以我在搜索引擎中输入了以下文字:
下载org / apache / commons / logging / LogFactory
,第一个结果是this。
下载并添加到您的项目中。