什么是java.io.IOException:无效的头字段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是java.io.IOException:无效的头字段?相关的知识,希望对你有一定的参考价值。

当我尝试运行以下命令时:

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)

我得到这些例外的原因是什么?

答案

我猜你的清单文件有问题。看看你是否有一个标题变量名称的拼写错误。

另一答案

检查您的manifest.txt文件是否以这种方式包含内容:

Main-Class:<“package-name”>。<“Main-class-name”> .class <“newline”>

请注意,解析时需要换行符/回车符。

请参阅此链接http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

另一答案

“jar -cvmf”而不是“jar cvfm”应解决上述错误

另一答案

我解决了类似的问题。它始终是第一个清单标头使JAR抛出“无效标头”IOException。所以我猜这是一个utf-8文件的BOM让Jar无法理解。虽然我认为我已经读过一个说清单文件应该utf-8编码的地方,但是我使用Windows的记事本将我的mf文件保存到ANSI,而JAR只是停止抱怨标题名称。

另一答案

一个愚蠢的错误(我做了)是做jar cvfm manifest.txt myjar.jar *.class而不是jar cvfm myjar.jar manifest.txt *.class

以上是关于什么是java.io.IOException:无效的头字段?的主要内容,如果未能解决你的问题,请参考以下文章

无效的密钥库格式:java.io.IOException:无效的密钥库格式

ES256 JWT 验证 - SignatureException:签名的无效编码:java.io.IOException:序列标签错误

java.io.IOException:无效的密钥库格式

keytool 错误: java.io.IOException: Invalid keystore format

java.io.IOException是怎么回事

为啥我收到 java.io.IOException: Mark has been invalidated?