我是一位经验丰富的开发人员,但只有很少的Java经验。在我的工作中,我继承了一个需要在沙箱外部运行的小型JNLP项目(all-permissions
)。有了JDK 1.7.0_51,我想我们现在需要把#34; Permissions: all-permissions
"在清单中也是如此。
到目前为止,我们一直在使用DrJava构建它,但是在DrJava菜单中项目|从项目创建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上运行,因为这可能是值得的。此外,对于它的价值,我已经在网上看到过{&#39; cvfm
&#39;和&#39; -cvfm
&#39;。我试过这两件事,但这似乎并不重要。
我认为问题出在我的manifest.txt中,而且我已经阅读了http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html,但我不知道自己可能做错了什么。
我对DrJava解决方案或命令行解决方案非常满意。
答案 0 :(得分:1)
知道了。事实证明,当您安装JDK 1.7.0_51时(或者至少在我安装时),它不会更新系统路径。你必须手工编辑它。所以我真的在运行JDK 1.6.1_25 JAR而不是1.7.0_51,而且我猜测&#34; Permissions&#34;在清单中,JDK 1.6.1_25不知道。不是最清晰的错误消息,谷歌搜索没有导致答案。我希望这对其他人有所帮助:if&#34; Permissions&#34;在您的清单中,然后“无效的标题字段”可能意味着您的路径指向过旧的JDK版本。