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

问题描述 投票:0回答:1

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。

java command-line jar
1个回答
0
投票
“错误名称”错误是此处的主要错误。这是什么意思:

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

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

Main-Class: ExampleProject.ExampleProgram

此外,文件夹结构

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

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

jar tvf myjar.jar

您应该会看到以下列表:

ExampleProject/ExampleProgram.class

在那个精确的位置。
© www.soinside.com 2019 - 2024. All rights reserved.