Bootstrap

java.lang.NoClassDefFoundError-IDEA打包第三方jar大坑

问题

使用idea打包生成jar后,总是出现java.lang.NoClassDefFoundError或者Error Invalid or corrupt jarfile XXX.jar的问题。

若在idea中可以正常运行,而打包jar后却,出现此现象是因为MANIFEST.MF文件没有正确地打包进jar里面。验证此问题可直接将jar解压出来,查看./META-INF下的MANIFEST.MF内容是否符合当前项目所需要的依赖。
在这里插入图片描述
上图可以看到文件夹里并没有MANIFEST.MF,所以运行jar会出现Invalid or corrupt jarfile XXX.jar的问题。

虽然idea显示使用该目录下的MANIFEST.MF,该目录也存在该文件,但是idea打包第三方jar时,默认使用target文件下的内容直接打包,原因未知。
在这里插入图片描述

解决

当target目录下不存在MANIFEST.MF,打包出来的也不存在,所以需要手动将E:\Java-workspace\TestJar\src\main\java\META-INF\MANIFEST.MF复制到target/classes/META-INF/下。若存在MANIFEST.MF,与预期不符,也需要将预期的MANIFEST.MF覆盖原有的MANIFEST.MF。
在这里插入图片描述

;