更改java jar时,It has been compressed and nested jar files must be stored without compression问题的解决

最近接手一个双无项目(无文档,无技术支持,有源码),由于已经在线运营,又有在线BUG需要处理。没人可以保证仓库的源码和线上的能够完全对应,为了保险起见,前期采用打class补丁的方案进行处理,改哪打哪,缩小问题范围。

由于项目使用了spring-boot-maven-plugin,又采用了多模块的方式打包,打包的模块又以jar的方式存在于主jar的BOOT-INF/lib下。

结果是要替换的代码被2层jar包裹的严严实实,对于jar里的class,还是像往常那样,改为tar后用7z拖进去更新就可以了。但是在更新lib下的jar时,出现问题了。运行时报错:

It has been compressed and nested jar files must be stored without compression

看意思是嵌套jar必须不压缩。然后一看导入后的大小,jar包确实被压缩了。

看来碰到个难搞的问题了。找了一圈,windows的7z工具也没有配置的地方。

google搜了一圈,没有结果。问了一圈AI,也没有直接的解决办法。2个小时过去了,折腾没有结果。忽然想起来AI解释是压缩包里是采用ZIP压缩格式的数据,想起来windows下拖入会自动压缩,那我用命令行指定不就成了吗?

说干就干,WSL跑起来,p7zip装起来。问了下AI命令行格式,捣鼓出了更新命令:
7za a -mx0 xxx-mobile-api-0.1.0-exec.jar BOOT-INF/lib/xxx-db-0.1.0.jar

结果提示jar格式无法被处理。改成tar,也不成

抱着最后一搏的心态,改成了.zip。结果竟然惊喜的通过了!

2个多小时折腾的结果,写成了这样一份脚本。以更新数据库模块举例:

updatedb.sh

#!/bin/bash

mv xxx-mobile-api-0.1.0-exec.jar xxx-mobile-api-0.1.0-exec.zip
7za a -mx0 xxx-mobile-api-0.1.0-exec.zip BOOT-INF/lib/xxx-db-0.1.0.jar
mv xxx-mobile-api-0.1.0-exec.zip xxx-mobile-api-0.1.0-exec.jar

使用Linux的p7zip更新jar包打class和资源补丁,实现了不报错可运行

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值