zip4j: java.lang.NoClassDefFoundError踩坑

问题

springboot多模块项目,docker部署。之前部署后的测试一切正常,今天项目有所改动,重新部署后,测试到一个压缩包导出接口突然报错java.lang.NoClassDefFoundError: net/lingala/zip4j/exception/ZipException。仔细查看打包的文件,编译后的文件里明明有Zip4j这个依赖,程序运行却找不到,反复尝试多次不能解决。网上查询发现别人有很和我一样的问题,但解决方法未能奏效,着实令人费解。

解决

感觉遇到问题时不能盲目动手,应该冷静,先去想想,到底是什么导致问题的产生,所谓追根溯源。

一番尝试网上的方法无所成效之后,我这才傻傻地意识到问题大概率出在这次更新添加的新的模块上。结果,一检查,果然,原来新增的模块也有一个地方引入了Zip4j,并且,版本还不一样。

参考maven官方仓库,不同版本的Zip4j实际上有很大的差异。之前使用的一直是1.3.2这个用的人最多的版本来实现文件的压缩,而这次添加的新模块里引入的确是2.5.1的差异版本。
项目启动时,两个模块同时被核心模块所依赖,使得Zip4j依赖包冲突了,导致了原本的代码导包错误。
于是,将新模块里的2.5.1版本Zip4j剃除,重新运行项目,问题得以解决。

posted @ 2021-03-31 17:15  KevinChu  阅读(463)  评论(0编辑  收藏  举报