当前位置: 首页 > news >正文

JAR 包中替换依赖jar的正确姿势(Windows 环境)

一、问题背景

在 Spring Boot 项目中,Maven 打包时会将所有依赖整合成一个可执行 JAR,结构大致如下:

app.jar
├── BOOT-INF/
│   ├── classes/
│   └── lib/
│       ├── my-common-4.0-SNAPSHOT.jar
│       ├── spring-core-6.x.x.jar
│       └── ...
└── META-INF/

有时我们希望只替换其中的某个依赖 jar(比如 my-common-4.0-SNAPSHOT.jar),
结果直接用 WinRAR 或 7-Zip 替换后,启动时却报错:

Caused by: java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/hz3000-pdec-common-4.0-SNAPSHOT.jar'. 
It has been compressed and nested jar files must be stored without compression.

二、问题原因

Spring Boot 的可执行 JAR(fat jar)中,
BOOT-INF/lib 下的所有依赖文件必须使用 存储模式(Stored) 保存,而非压缩模式(Deflated)。

📘 原理:
Spring Boot Loader 直接基于偏移量访问内部 JAR 文件,
若使用压缩模式,偏移量信息被破坏,导致无法解压读取。

而 WinRAR、7-Zip 等图形工具默认使用“压缩模式”
因此即使替换成功,运行时也会报错。

三、解决方案

mkdir D:\temp\BOOT-INF\lib
jar uf0 D:\app.jar -C D:\temp BOOT-INF/lib/my-common-4.0-SNAPSHOT.jar

http://www.dtcms.com/a/552963.html

相关文章:

  • linux驱动开发之pr_warn和pr_warning
  • Keil(MDK-ARM)和 STM32CubeIDE对比
  • Linux上使用Docker安装MinIO指南
  • Maven 依赖冲突:解决 jar 包版本不一致的 3 种方法
  • android集成react native组件踩坑笔记(Activity局部展示RN的组件)
  • 多语言网站思路十大h5页面制作工具
  • 汽车之家网站系统是什么做的防爆玻璃门网站建设
  • k8s——services资源+pod详解1
  • 基于深度学习的医疗器械分类编码映射系统:实现篇
  • [人工智能-大模型-122]:模型层 - RNN是通过神经元还是通过张量时间记录状态信息?时间状态信息是如何被更新的?
  • React 18.x 学习计划 - 第六天:React路由和导航
  • 逻辑回归正则化参数选择实验报告:贝叶斯优化与网格搜索的效率对比
  • 建设景区网站推文网站中了木马了怎么办
  • 【JAVA 进阶】重生之我要学会 JUC 并发编程
  • POST 数据提交注入测试sqlilabs less 11
  • 微服务高并发设计考虑要点
  • 解码LVGL Linux 系统(Ubuntu/WSL + 开发板)移植
  • 长春网站制作昆明君创网络科技有限公司
  • 把 CLI 搬上 Web:在内网打造“可二开”的 AI IDE,为什么这条路更现实?
  • iOS 上架应用市场全流程指南,App Store 审核机制、证书管理与跨平台免 Mac 上传发布方案(含开心上架实战)
  • 酒厂网站源码now9999网站提示建设中
  • iOS 中的引用计数
  • C++多线程运行整理
  • 【渲染引擎基础】圣杯架构——固定逻辑时长+插值渲染
  • iOS 崩溃日志分析工具全指南,多工具协同构建稳定性分析体系
  • 做网站推广的难点、襄阳地区网站做的好的
  • 从U-Net到U-Net++:图像分割网络的进阶之路
  • 打工人日报#20251031
  • Huggingface的国内镜像
  • 软件测试工程师面试准备