讨厌的manifest
jar包要运行,必须指定manifest.mf
使用方法在很多地方都有说明
jar 命令的 -m 参数可以指定,但是有一些要注意的事情
manifest 文件在书写的时候
Main-Class: package.ClassName
这个属性中,冒号后面一定得是一个空格,空格多了或者使用 tab (制表符)代替空格都会出错
根据我的实验,在linux下执行 jar 命令的时候出现如下提示错误
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:393)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at sun.tools.jar.Main.run(Main.java:123)
at sun.tools.jar.Main.main(Main.java:903)
在 windows xp 下很奇怪地在jar -m的时候没有错误提示,但无法执行(这种情况在多空格时出现,制表符情况没有实验)
执行 java -jar xxx.jar 的时候才提示如下错误
Exception in thread "main" java.lang.NoClassDefFoundError: testPages/TestMain
Caused by: java.lang.ClassNotFoundException: testPages.TestMain
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
很奇怪,不理解 java 为什么对这个问题表现得这么笨……
推荐文章 |
