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二进制模式是无法比对出来的,但是文件大小是有区别的。

相关推荐
寻道码路6 分钟前
LangChain4j Java AI 应用开发实战(二十六):多模型集成策略 —— OpenAI、DeepSeek、阿里百炼混合使用
java·开发语言·人工智能·ai
ch.ju12 分钟前
Java Programming Chapter 4——Static code block
java·开发语言
risc12345614 分钟前
Lucene80DocValuesConsumer 五种类型源码阅读顺序
java·服务器·前端
弹简特15 分钟前
【Java项目-企悦抽】04-项目演示+项目源码+AI赋能整理接口文档
java·开发语言
万亿少女的梦16826 分钟前
基于Spring Boot的楚雄旅游景区门票售卖系统设计与实现
java·spring boot·mysql·vue·系统设计
不会写代码的ys26 分钟前
C++复习篇
java·开发语言·c++
我是个假程序员1 小时前
实例化动作脚本类,并执行,执行类似N_F1_SAVE.java这种
java·nc
青山木1 小时前
Hot 100 --- LRU 缓存
java·数据结构·算法·leetcode·链表·缓存·哈希
花生了什么事o1 小时前
Java 线程池:从参数到拒绝策略
java·jvm
长孙豪翔1 小时前
引发事件的问题
java·linux·数据库