0

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

这两个都在 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 上。无论有无类路径选项,我都会遇到相同的错误。

4

2 回答 2

7

java文档中:

-罐

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

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

因此,您gameclient.jar必须包含您需要的所有用户类。该classpath设置被忽略。只需创建gameclient.jar以将类包含在json.jar.

于 2012-10-01T21:33:17.713 回答
2

除了将类路径作为命令行参数提供之外,您还可以将类路径条目添加到您的GameClient MANIFEST.MF

Class-Path: dist/json.jar 

请参阅在您的 MANIFEST.MF 中包含类路径

于 2012-10-01T21:42:55.673 回答