创建JAR文件后,命令行返回“错误:找不到或加载主类ExampleProgram”?

时间:2019-10-20 01:18:37

标签: java command-line jar

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。

1 个答案:

答案 0 :(得分:0)

“错误名称”错误是此处的关键错误。这是什么意思:

在Java中,类的全名是其程序包,后跟一个点,然后是类名。因此,您为此课程的全名是ExampleProject.ExampleProgram

要启动它们,必须将这个全名放在清单中:它需要具有一个类似于以下内容的条目:

Main-Class: ExampleProject.ExampleProgram

此外,文件夹结构必须匹配点。因此,jar文件(实际上只是一个zip文件)必须在根目录中包含一个名为ExampleProject的目录,并且该目录需要一个名为ExampleProgram.class的文件。

您弄错了其中一个或两个,导致了此错误。您可以按如下方式检查jar文件的结构:

jar tvf myjar.jar

您应该会看到以下内容的列表:

ExampleProject/ExampleProgram.class

在那个精确的位置。