执行jar时java类路径的问题

And*_*e85 0 java

我正在尝试执行一个 java 应用程序,该应用程序打包为 jar 存档。

java -cp .\lib\json.jar -jar ".\myarchive.jar"
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,指出无法找到 json.jar 存档中的类。

Exception in thread "main" java.lang.NoClassDefFoundError: json/serializers/JsonTypeResolversInstance
Caused by: java.lang.ClassNotFoundException: json.serializers.JsonTypeResolversInstance
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 2 more
Run Code Online (Sandbox Code Playgroud)

jar 文件包含该类,所以我认为这个错误不应该发生。使用我的 IDE 执行代码时,它运行时没有错误。

我尝试过很多方法来解决这个问题,但没有成功。

Jes*_*per 5

同时使用-cp和选项不起作用。-jar当您使用该-jar选项时,该-cp选项将被忽略。

在 Java 中运行 JAR 文件中的代码有两种方法。

第一种方法:使用选项并在命令行上-cp指定包含该方法的类的名称。main例如:

java -cp .\lib\json.jar;.\myarchive.jar com.mypackage.MyMainClass
Run Code Online (Sandbox Code Playgroud)

当您这样做时,您可以在命令行上指定类路径(使用-cp)。类路径必须包含所有 JAR 文件和/或目录,其中包含应用程序所需的所有类。您还必须指定要在命令行上运行的类的名称。

此外,当您这样做时,JAR 文件中可能存在的清单文件将被忽略。

第二种方式:使用-jar选项。例如:

java -jar .\myarchive.jar
Run Code Online (Sandbox Code Playgroud)

当你这样做时,Java 将查看JAR 文件中的清单文件。类路径和要运行的类的名称将从清单文件中获取,并且-cp命令行上的选项将被忽略。

详细信息请参见java命令的文档。