0

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

到目前为止,我们一直在使用 DrJava 构建它,但是在 DrJava 菜单Project | Create Jar File from ProjectCustom Manifest的复选框是“灰色的”(不可用)。因此,我第一次尝试从命令行构建 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 解决方案或命令行解决方案都非常满意。

4

1 回答 1

1

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

于 2014-04-17T18:35:43.303 回答