尽管对可执行 jar 使用清单文件,但我仍然收到 "Could not find or load main class" 错误

I keep getting "Could not find or load main class" error despite using a Manifest file for an executable jar

基本上我是在学习一个可执行jar文件的编译过程。因此,为此,在目录 src\com\mftest 中,我有一个名为 Test.java 的文件,其中包含以下内容。

package com.mftest;

public class Test
{    
    public static void main(String args[]) 
    {    
        System.out.println("Hello from Test!");
    }
}

现在,在主文件夹(包含 src 文件夹)中,我还有文件夹 bin,我键入 javac -d bin src\com\mftest\Test.java。这将创建文件 bin\com\mftest\Test.class

然后,我在文件夹 bin\com\mftest 中创建了一个包含以下内容的文件 Manifest.txt。注意这里有两行,第二行是空白。

Main-Class: com.mftest.Test

我现在在 bin\com\mftest 文件夹中输入 jar cmvf Manifest.txt Test.jar *.class 来创建文件 bin\com\mftest\Test.jar。我希望该文件是可执行文件,但是当我尝试通过键入 java -jar Test.jar 来 运行 它时,我收到以下错误。

Error: Could not find or load main class com.mftest.Test
Caused by: java.lang.ClassNotFoundException: com.mftest.Test

知道吗,我在这里犯了什么错误?

From within the bin\com\mftest folder, I now type jar cmvf Manifest.txt Test.jar *.class to create the file bin\com\mftest\Test.jar

我想我明白你的问题了。

如果您 运行 jar tvf Test.jar 我希望您会看到 Test.class 文件在 JAR 文件中的路径是 "/Test.class"。应该是 "/com/mftest/Test.class".

您的错误是将目录更改为 bin\com\mftest。您应该已经从 bin 目录中创建了 JAR 文件,以使 JAR 中的路径名正确。

请注意,您包含在 JAR 中的清单文件可以在任何地方。您只需要在 jar 命令中为其提供正确的(文件系统)路径。