【问题标题】:"invalid header field" (in manifest?) when creating JAR创建 JAR 时“无效的标头字段”(在清单中?)
【发布时间】:2014-05-23 03:22:51
【问题描述】:

我是一位经验丰富的开发人员,但几乎没有 Java 经验。在我的工作中,我继承了一个需要在沙箱之外运行的小型 JNLP 项目 (all-permissions)。对于 JDK 1.7.0_51,我认为我们现在还需要在清单中添加“Permissions: all-permissions”。

到目前为止,我们一直在使用 DrJava 构建它,但是在 DrJava 菜单 Project |从项目中创建 Jar 文件自定义清单 的复选框“灰显”(不可用)。因此,我第一次尝试从命令行构建 JAR。

我已将以下内容放入名为“manifest.txt”的文件中:

Permissions: all-permissions
Main-class: main

(我相信Main-class: main 是必需的,而且到目前为止 DrJava 一直在为我隐含地这样做。)而且,是的,我在最后一行之后确实有一个换行符。

当我尝试使用命令行构建 JAR 时...

jar -cvfm foo.jar manifest.txt main.class UUID.class etc.class

...我得到以下异常:

java.io.IOException: invalid header field
    at java.util.jar.Attributes.read(Attributes.java:389)
    at java.util.jar.Manifest.read(Manifest.java:182)
    at java.util.jar.Manifest.<init>(Manifest.java:52)
    at sun.tools.jar.Main.run(Main.java:151)
    at sun.tools.jar.Main.main(Main.java:1149)

我在 Microsoft Windows 7 上运行,这可能不值一提。此外,对于它的价值,我在网上看到了“cvfm”和“-cvfm”的例子。两个都试过了,好像没关系。

我认为问题出在我的 manifest.txt 中,并且我已经阅读了 http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html,但我看不出我可能做错了什么。

我对 DrJava 解决方案或命令行解决方案都非常满意。

【问题讨论】:

  • 通常你得到这个是因为你的 f 和 m 标志被切换了,但你上面的情况似乎不是这样。
  • 是的。我怀疑该清单文件实际上有问题,但由于这是我写的第一个文件,所以我有点不知所措。

标签: java jar manifest drjava


【解决方案1】:

知道了。事实证明,当您安装 JDK 1.7.0_51(或至少在我安装时)它不会更新系统路径。你必须手动编辑它。所以我真的在运行 JDK 1.6.1_25 JAR 而不是 1.7.0_51,我猜想 JDK 1.6.1_25 不知道清单中的“权限”。不是最清楚的错误信息,谷歌搜索也没有得到答案。我希望这对其他人有所帮助:如果“权限”在您的清单中,那么“无效的标头字段”可能意味着您的路径指向的 JDK 版本太旧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2014-07-12
    • 2013-04-26
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    相关资源
    最近更新 更多