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?。
我正在尝试为我的 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?。