java - JAR 命令不使用提供的 list

标签 java manifest executable-jar

不确定为什么会收到此错误,我觉得我错过了一些非常简单的东西。这是我面临的一个问题,试图遵循this关于从命令行创建 JAR 可执行文件的帖子。这是我的简单测试文件:

JarExample.java:

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

list .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 内部,存在正确的类文件,但存在以下自动生成的 list META-INF/MANIFEST.MF:

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

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

谢谢!

最佳答案

我已按照您描述的所有步骤进行操作,并且已成功创建可执行 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

关于java - JAR 命令不使用提供的 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70305292/

相关文章:

java - MockIntegrationMessage 在缓存上下文时不起作用

java - Java中的线程概念

java - 找不到与标签上给定名称匹配的资源

c++ - 读取应用程序的 list 文件?

java - 获取正在运行的 JAR 文件的路径返回 "rsrc:./"

java - 如何使用 Jsoup 选择这些元素?

java - 修剪Java中字符串的可能前缀

java - 无法运行 .jar 因为 "no main manifest attribute"

Java 可执行 jar。这段代码的作用是什么?

java - 创建一个打开命令的可执行 jar