JAR 命令不使用提供的清单

JAR Command not using supplied Manifest

不确定为什么会出现此错误,我觉得我遗漏了一些非常简单的东西。这是我在尝试遵循 this post 从命令行创建 JAR 可执行文件时面临的问题。这是我的简单测试文件:

JarExample.java:

public class JarExample {
    public static void main(String[] args) {
        
    }
}

MANIFEST.MF:

Manifest-Version: 1.0
Main-Class: JarExample

我 运行 按照以下命令构建 JAR:

javac JarExample.java
jar cfm JarExample.jar MANIFEST.MF *.class

然而,当我 运行 java -jar JarExample.jar 时,出现以下错误:

no main manifest attribute, in JarExample.jar

在 JAR 内部达到峰值,存在正确的 class 文件,但存在以下自动生成的清单 META-INF/MANIFEST.MF

Manifest-Version: 1.0
Created-By: 1.8.0_162 (Oracle Corporation)

那么我对 jar 命令的使用在哪里不正确?为什么它无法识别我提供的清单文件?

谢谢!

我已按照您描述的所有步骤进行操作,并且已成功创建可执行 jar 文件。

我正在使用 openjdk 11.0.11 2021-04-20

.jar 文件中生成的文件如下所示:

Manifest-Version: 1.0
Main-Class: JarExample
Created-By: 11.0.11 (Ubuntu)

所以这可能是由您的 Java 版本或使用的操作系统引起的。

在你引用的答案中,有a useful comment by David:

If you create the MANIFEST.MF file, don't forget to finish the last line with a line break. On Windows just add an empty line at the end. Otherwise the last attribute will not make it in the jar file. In this special case the Main-Class attribute will be missing.

可能,这就是你的情况。因为当我删除 MANIFEST.MF 中的最后一个换行符时,我得到了与你的错误相同的错误:

no main manifest attribute, in JarExample.jar

带有最后一个换行符的 MANIFEST.MF 示例(第 3 行为空)- 运行良好

Manifest-Version: 1.0
Main-Class: JarExample

没有最后一个换行符(2 行代码)- 崩溃并出错

Manifest-Version: 1.0
Main-Class: JarExample