背景是博主想把在idea下面的项目包括依赖打包进可执行的jar(有很多种方式,maven,ant都行),在网上找了一遍教程,最后觉得直接使用idea打包最快(内网使用maven没有源真的痛苦)。
1、遇到问题
按照网上的方法,一路顺风顺水,配好main方法,配置META-INF路径(这个很重要),完全没有一点错误,顺顺利利把jar打好。你以为这就完事了?you are to simple。打完包后开开心心的在windows上输入cmd召唤出命令行,满怀信心的的敲上java -jar xxxx.jar,然后屏幕就弹出错误:找不到或无法加载主类 com.xxx.xxx。纳尼,突然傻眼了。
2、找问题和解决方案
1、遇到问题第一步想法是是不是某一步弄错了,赶紧回去翻教程,兢兢业业的把每一步重新做了一遍,然而还是一点用都没,网上好多都表示是META-INF的路径弄错了,要放在src目录下,照办了,那个错误还是跳出来嘲笑我。
2、一度没辙,想了一下把jar解压缩,看看是否真的缺类,然后发现那个.class文件就在对应的路径下。好吧。。。
3、找了大半天问题,没有头绪,这时只能找向万能的谷歌或百度了,倒是找到不将依赖包打进jar的方法,还能正常运行。这时我就有不香的鱼干。
4、想起第三步,然后自己在idea建了个简单的项目,下面只有helloword的主类,没有任何依赖,安照步骤1的方法,打包然后执行,正常打印出hello word。emmmmm,这时就怀疑有可能是部分依赖包解压缩后的问题了,然后测试加了部分依赖打包到helloword的jar包,还是能正常运行。
5、知道是部分依赖包解压会导致jar无法执行,但你又不能不用,这就很难受了,这时突然不小心扫了一个博客下面的讨论。这是博客的地址,多谢这位老哥(李志勇)的提示:每次打包后, 将jar包里面的.DSA,.FSA,.SF都删除掉,就可以运行了 (通过winRAR里面删除) ,亲测可用,具体为啥DSA,FSA,SF等会导致找不到主类的博主还在找答案,找到会在下面评论公布。也欢迎各位有经验的老哥指点,谢谢