前言:
java如何打jar包并运行jar包文件就不重点描述了,一般都是通过工具直接导出或通过命令生成jar包,通过工具生成的META-INF文件夹里的配置文件MANIFEST.MF文件一般都选择配置好的。导出后可直接java -jar xxx.jar运行,通过命令生成的MANIFEST.MF一般都没配置Main-Class: ,需要你手动加入你的主文件。下面主要针对命令打 jar包运行jar包遇到的坑讲解一下:
一.java 打包 、运行
1.建一个TEST文件夹,里面建一个java文件 Test.java, 然后编译 javac Test.java 这时文件里多了一个Test.class文件,这个就是我们要打包的文件。开始打包:jar -cvf Test.jar Test.class 打包完成生成一个Test.jar的包,如果直接运行jar包 java -jar Test.jar会报一个错:"Test.jar中没有主清单属性",说明生成的jar包中MANIFEST.MF没有配置Main-Class: ,将其配置成Main-class: Test即可,主要要冒号后面有空格。看上去万事大吉了,结果一运行又报了错:"尝试打开文件Test.jar时出现意外错误",这又是什么情况,最后发现是好压软件的坑,jar包你用好压打开后,又修改了MANIFEST.MF文件后,保存文件时相当于用好压直接压缩了,造成jar文件的损坏,导致不能正常运行。
2.选择另一种方式,把MANIFEST.MF文件提前准备好,然后直接用jar命令打成的包应该没啥问题,于是我用notepad编辑配置好MANIFEST.MF文件后开始打包 jar-cvfm Test.jar META-INF\MANIFEST.MF Test.class 这应该可以了,结果打包时就报错:"java.io.IOException: invalid header field name: ???Manifest-Version",网上找了半天也没解决,最后发现我用的notepad工具编码用的UTF-8-BOM,必须用UTF-8才可以,转换了下编码,打包通过了。直接java -jar Test.jar 运行成功!
不同条件下出现的问题现象不一样,只是针对自己的问题现象做下描述讲解,仅供参考!