failed to get nested archive for entry Boot-inf/lib/xxx.jar

直接原因

修改 Spring Boot 的可执行 JAR 包时,往 BOOT-INF/lib/ 目录下添加或替换的 JAR 文件被错误地压缩了,而 Spring Boot 的类加载器要求嵌套的 JAR 必须采用"存储(STORED)"模式(即不压缩)。

核心原因

Spring Boot 的可执行 JAR(Fat JAR)结构特殊,它自身是一个 JAR,内部 BOOT-INF/lib/ 目录下又包含了项目依赖的其它 JAR 文件(嵌套 JAR)。Spring Boot 自定义的 JarFile 类需要能够通过文件偏移量直接访问这些嵌套的 JAR 。如果嵌套的 JAR 被压缩,这种直接访问机制就会失效。

问题场景:同样的包,测试环境可以,生产就不行

最可能的是:生产环境的JAR包是在测试环境打包,然后复制到生产环境时,复制过程中可能损坏了JAR包(如FTP使用ASCII模式传输二进制文件导致损坏)。或者生产环境的JAR包被某个部署工具(如jenkins、ansible)修改过(例如解压后重新打包,但压缩方式不正确)。

建议检查生产环境的JAR包是否与测试环境的完全一致(通过md5校验:md5sum ),此时通过Beyond compare二进制模式是无法比对出来的,但是文件大小是有区别的。

相关推荐
DevOpenClub16 小时前
职教高考及高职分类招生控制线 API 接口
java·数据库·高考
Tsuki_tl16 小时前
【总结】Java的线程状态
java·后端·面试·多线程·并发编程·线程状态
苦逼的猿宝16 小时前
springboot的网页时装购物系统
java·毕业设计·springboot·计算机毕业设计
WL_Aurora16 小时前
Java多线程编程基础与实践
java·多线程
再写一行代码就下班16 小时前
根据给定word模板,动态填充指定内容,并输出为新的word文档。(${aa}占位符方式且支持循环动态表格)
java·开发语言
西安邮电大学16 小时前
SpringMVC执行流程
java·后端·spring·面试
i220818 Faiz Ul16 小时前
智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧养老平台
AI砖家16 小时前
每日一个skill:web-artifacts-builder,构建复杂 Claude.ai HTML Artifact 的生产力工具包
java·前端·人工智能·python
彦为君16 小时前
JavaSE-05-字符串(全面深入)
java·开发语言·python·ai·ai编程
叶半欲缺17 小时前
Linux初始化数据盘
java·linux·服务器