【问题标题】:Main-Class is not written to manifest of a jarMain-Class 未写入 jar 的清单
【发布时间】:2018-12-24 09:17:39
【问题描述】:

当我使用 .class 文件创建 jar 文件时:

jar cmvf META-INF/MANIFEST.MF MyApp.jar *.class

jar cmvf manifest.mf MyApp.jar *.class

尽管清单文件中有一行包含主类:

清单版本:1.0

创建者:1.8.0_171(甲骨文公司)

主类:MainClassName

启动 MyApp.jar 时出现错误

java -jar MyApp.jar

没有主清单属性,在 MyApp.jar 中

当我解压 jar(在其他文件夹中)时:

jar xf MyApp.jar

清单如下所示:

清单版本:1.0

创建者:1.8.0_171(甲骨文公司)

为什么主类行消失了? “MainClassName.class”在此文件夹中,其中包含主要功能。这是我创建 jar 时的输出:

添加清单

添加:SomeClass.class(in = 1106) (out= 472)(放气 57%)

...其他类...

提前致谢。

[解决方案]感谢戴夫

(特别是在 Windows 上)确保最后一行,这里是 Main-class: 行,有一个行终止符,也就是换行符(LF 或 CRLF)。如果最后一行未终止,则将其忽略。 (官方实际上应该在清单主部分的末尾有第二个换行符,因此是一个空行,但 IME 没有它也可以工作。)

【问题讨论】:

  • Main-Class: MainClassName 中,您是否在类名前加上命名空间:Main-Class: com.mypackage.MainClassName
  • (特别是在 Windows 上)确保最后一行,这里是 Main-class: 行,有一个行终止符,也就是换行符(LF 或 CRLF)。如果最后一行未终止,则将其忽略。 (官方实际上应该有第二个换行符,因此是一个空行,在清单主要部分的末尾,但 IME 没有它就可以工作。)
  • 感谢@dave_thompson_085!这就是解决方案! :D

标签: java jar manifest.mf


【解决方案1】:

从 Java 8 开始,manifest 写在 jar 名之后:

jar cmvf MyApp.jar META-INF/MANIFEST.MF *.class

Java 7
Java 8

【讨论】:

  • 不;参数的顺序必须与相关选项 (e,f,m) 的顺序相同。您链接的两个页面都这么说,尽管在不同的地方。 j7页面的examples使用顺序mf,j8页面使用efm,但是两个版本都支持所有一致的顺序。
猜你喜欢
  • 2013-11-06
  • 2015-03-23
  • 1970-01-01
  • 2014-03-12
  • 2016-09-24
  • 2014-12-02
  • 2019-09-07
  • 2012-01-10
  • 2019-08-11
相关资源
最近更新 更多