JAR文件将不会运行,而是返回
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)
我尝试删除类文件,然后重新创建JAR文件。我尝试删除并重新创建该程序。我尝试创建没有清单的JAR文件。
package ExampleProject;
public class ExampleProgram {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
这是我尝试在命令行上创建JAR文件的确切过程。
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class ExampleProgram.java
Josephs-MBP:program jepappano4$ java ExampleProgram
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class ExampleProgram.java
Josephs-MBP:program jepappano4$ ls
ExampleProgram.class ExampleProgram.java manifest.mf
Josephs-MBP:program jepappano4$ jar -cvfm myprogram.jar manifest.mf *.class
added manifest
adding: ExampleProgram.class(in = 450) (out= 301)(deflated 33%)
Josephs-MBP:program jepappano4$ java -jar myprogram.jar
Error: Could not find or load main class ExampleProgram
Caused by: java.lang.NoClassDefFoundError: ExampleProject/ExampleProgram (wrong name: ExampleProgram)
我正在遵循有关创建JAR文件的教程,我希望此过程可以正常工作,但事实并非如此。我在这里做错了什么?
不确定这是否重要,但是,我正在使用Java 11。
答案 0 :(得分:0)
“错误名称”错误是此处的关键错误。这是什么意思:
在Java中,类的全名是其程序包,后跟一个点,然后是类名。因此,您为此课程的全名是ExampleProject.ExampleProgram
。
要启动它们,必须将这个全名放在清单中:它需要具有一个类似于以下内容的条目:
Main-Class: ExampleProject.ExampleProgram
此外,文件夹结构必须匹配点。因此,jar文件(实际上只是一个zip文件)必须在根目录中包含一个名为ExampleProject
的目录,并且该目录需要一个名为ExampleProgram.class
的文件。
您弄错了其中一个或两个,导致了此错误。您可以按如下方式检查jar文件的结构:
jar tvf myjar.jar
您应该会看到以下内容的列表:
ExampleProject/ExampleProgram.class
在那个精确的位置。