问题
When i try to run the following command :
jar cvfm myjar.jar manifest.txt *.class
I get the following exceptions :
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)
What could be the reason i am getting these exceptions ?
回答1:
I'm guessing that there's a problem with your manifest file. Give it a look to see if you've got a typo in the name of a header variable.
回答2:
Check that your manifest.txt file contains the content in this manner :
Main-Class: <"package-name">.<"Main-class-name">.class <"newline">
Note that newline/carriage-return is necessary for parsing.
Refer to this link http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
回答3:
"jar -cvmf" instead of "jar cvfm" should resolve the above error
回答4:
I solved a similar problem. It's always the first manifest header makes JAR throw an "invalid header" IOException. So I guess it's the BOM of a utf-8 file makes Jar can't understand. Although I think I have read somewhere that saying a manifest file should utf-8 encoded, I saved my mf file to ANSI with Notepad of Windows, and JAR just stopped complaining about the header name.
回答5:
A stupid mistake to do (which I did) was to do jar cvfm manifest.txt myjar.jar *.class
instead of jar cvfm myjar.jar manifest.txt *.class
来源:https://stackoverflow.com/questions/9275277/what-is-java-io-ioexception-invalid-header-field