当我尝试运行以下命令时:
jar cvfm myjar.jar manifest.txt *.class
我得到以下例外情况:
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:410)
at java.util.jar.Manifest.read(Manifest.java:199)
at java.util.jar.Manifest.<init>(Manifest.java:69)
at sun.tools.jar.Main.run(Main.java:171)
at sun.tools.jar.Main.main(Main.java:1176)
我得到这些例外的原因是什么?
答案 0 :(得分:6)
我猜你的清单文件有问题。看看你是否在标题变量的名称中输入错字。
答案 1 :(得分:1)
检查您的manifest.txt文件是否以这种方式包含内容:
Main-Class:&lt;“package-name”&gt;。&lt;“Main-class-name”&gt; .class&lt;“newline”&gt;
请注意,解析时需要换行符/回车符。
请参阅此链接 http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
答案 2 :(得分:0)
“jar -cvmf”而不是“jar cvfm”应解决上述错误
答案 3 :(得分:0)
我解决了类似的问题。 它总是第一个清单头使JAR抛出一个&#34;无效的标题&#34; IOException异常。所以我猜它是一个utf-8文件的BOM,这让Jar无法理解。 虽然我认为我已经阅读了某个说清单文件应该是utf-8编码的地方,但是我使用Windows的记事本将我的mf文件保存到ANSI,并且JAR刚刚停止抱怨标题名称。
答案 4 :(得分:0)
做的一个愚蠢的错误(我做过)是做jar cvfm manifest.txt myjar.jar *.class
而不是jar cvfm myjar.jar manifest.txt *.class