java.lang.NoClassDefFoundError 用于 Java Jar 文件

java.lang.NoClassDefFoundError for Java Jar File

我正在尝试为我的 Java 文件之一创建一个 jar 文件。但是,一旦我创建它并尝试 运行 它,我得到一个 java.lang.NoClassDefFoundError.

我执行了以下操作来创建 jar。该文件是 Worker.java 并且在 src/beatDB.

jar cfm Worker.jar Manifest.txt src/beatDB

我的 Manifest.txt 文件只是

Main-Class: Main-Class: beatDB.Worker \n(后记换行)

当我 运行 java -jar Worker.jar 时,出现此错误。

Exception in thread "main" java.lang.NoClassDefFoundError:
beatDB/Worker
Caused by: java.lang.ClassNotFoundException: beatDB.Worker
    at java.net.URLClassLoader.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

但是如果我 运行 java beatDB/Worker,文件 运行 没问题。

有谁知道如何解决这个问题?

您应该将清单与 .class 文件一起打包,而不是 .java 文件。

.java 个文件包含源代码。

.class 文件包含编译后的代码。对于Java,它被称为字节码。

您希望 classes 的包结构反映在您的 jar 文件中。如果您在 com.example 下有一个 Animal class,那么您的 jar 文件应该包含 com/example/Animal.class

有关正确的 jar 文件包结构,请参阅 How to create jar file with package structure?