记一次Unable to open nested entry ‘BOOT-INFlib.jar‘. It has been compressed
感谢原文:https://blog.csdn.net/weixin_38084097/article/details/126479173
问题背景
前段时间由于工作失误,误将工程项目中某一个依赖包没有添加@loadbalanced注解就直接打包依赖到的主工程中,并发送项目现场测试。出来混的,迟早都要还的。这不,今天就接到项目现场测试部同事投诉,说是程序包无法启动。报错如下:
排查原因
当时第一反应是bis-service这个包咋这么熟悉嗫,灵光一闪,WC,这不是我单独打包替到主工程包里面的那个依赖包么。那这个问题的排查思路也就出来了:
-
将bis-service替换到程序包的lib时出错
-
bis-service包本身有错
如果bis-service包本身含错,报错信息应该不是这样,所以问题产生的原因可以锁定在使用bis-service替换到程序包lib过程中。
问题产生原因分析
当时将bis-service替换到lib中时,主程序是已经打包成了jar,所以当时是直接以解压软件打开后,将bis-service.jar包替换致lib下,重新压缩。是否是压缩软件重新压缩过程中,将bis-service.jar也压缩了,所以导致springboot不能读取该包?
解决方案
既然不能直接使用解压软件,那就直接使用java自带命令解压后,然后将对应jar包替换到lib中,在使用java命令重新压缩不就行了么(我可真是个小天才)。
-
使用如下命令,将主程序包解压, 其中xxx是需要解压的jar包名
jar -xvf xxx.jar 1
-
解压后,将需要替换的jar包替换到/BOOT-INF/lib/ 下,再使用如下命令重新压缩
jar -cfM0 ./ 1
结果
将替换好的主程序包java -jar,嘿,好了!
结果
将替换好的主程序包java -jar,嘿,好了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)