问题描述:
主包:hisca.jar,解压后 BOOT-INFO/lib下有其他jar包
因为一个小bug,需要修改这个hisca包下BOOT-INF/lib下的子jar包service-hisca-impl-1.0.0.jar中的一个service类及xml文件
操作步骤:
1、主包jar -xvf hisca.jar解压后,找到内层包service-hisca-impl-1.0.0.jar
2、内层包使用jar -xvf service-hisca-impl-1.0.0.jar 解压后,替换里面的class文件后,再重新使用 jar -cvf service-hisca-impl-1.0.0.jar * 打包新的内层补丁包;
3、将打包的新内层jar包拷贝到解压后的主包的指定目录下;
重新将解压后的主包目录下所有文件打包,jar -cvf hisca.jar * 打主包
打包后运行错误:
但这样操作后java -jar启动主包报错:
java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/spring-boot-starter-2.3.0.RELEASE.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
感觉在打包过程中,把内层jar包都压缩了,导致无法正确读取jar包?
网上提供了一个解决方案,使用windows的 winRAR修改jar包:
解决方案
首先要把lib下的jar包拉出来,进行文件替换,压缩方式使用存储(如果不选默认压缩方式是标准,会对文件进行压缩的,jar命令貌似也做了压缩,所以上面方式不可取);然后将jar包再拉到lib下,压缩方式依然使用存储。
在替换jar包里的文件的时候,用压缩工具打开(可以用winrar、好压,因为可以选压缩方式),将需要替换的文件拖进压缩包,此时要注意:更改压缩方式为存储!更改压缩方式为存储!更改压缩方式为存储!默认是标准。