classpath不工作 - java lang ClassNotFoundException

时间:2012-10-01 21:26:37

标签: java classpath

我有一个名为GameClient.jar的jar,它有一个main方法。我有一个json.jar,它包含一个org / json / JSONException.class

这两个都在dist文件夹中。

我运行以下内容 java -classpath dist/json.jar -jar dist/gameclient.jar

我不确定为什么还要

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

Caused by: java.lang.ClassNotFoundException: org.json.JSONException

我在Windows XP和Java 1.7上。无论有没有classpath选项,我都会得到相同的错误。

2 个答案:

答案 0 :(得分:7)

来自java文档:

  

-jar

     

执行封装在JAR文件中的程序。第一个参数是JAR文件的名称          而不是启动类名称。为了使此选项起作用,JAR的清单          file必须包含Main-Class形式的行:classname。这里,classname标识了          具有public static void main(String [] args)方法的类,作为您的应用程序          阳离子的起点。请参阅jar(1)和Java Tutorial的Jar轨迹@          有关使用Jar文件的信息,请http://java.sun.com/docs/books/tutorial/jar          和Jar文件清单。

     

使用此选项时,JAR文件是所有用户类和其他用户的来源          类路径设置被忽略。

因此,您的gameclient.jar必须包含您需要的所有用户类。 classpath设置被忽略。只需创建gameclient.jar即可在json.jar中包含这些类。

答案 1 :(得分:2)

您可以向GameClient MANIFEST.MF添加类路径条目,而不是将类路径作为命令行参数提供:

Class-Path: dist/json.jar 

请参阅Including a Class-Path In Your MANIFEST.MF