替换Spirng boot jar包里面的文件

很多时候我们发布的Springboot项目打成一个大的jar包,里面包含大量的三方依赖包,和自己的业务代码包,整体发布时间过长,需要只替换业务包子包或者class文件,进行快速的增量部署。

如果直接使用压缩软件或者命令压缩后,启动jar包可能会出现如下的错误:Caused by:java.io.IOException: Unable to open nested jar file "BOOT-INF/1ib/fastjson-1.2.79.jar,主要原因是由于文件被“加密压缩了”,注意下压缩选选里面使用 -0 选项, store only仅仅存储文件即可,切勿压缩文件。


目标jar文件:“spring.jar”,目标class文件“ ZentaoController.class”

一、替换指定的class或多个class到压缩包内

本方法特点是不解压整个jar包,仅仅把需要替换的文件替换进去。

1.找到文件在jar包中的路径,

jar -tvf spring.jar grap | ZentaoController.class

得到 文件全路径:BOOT-INF/classes/com/test/springbootest/controller/ZentaoController.class

2.将查找到的路径解压出来

jar -xvf spring.jar BOOT-INF/classes/com/test/springbootest/controller/ZentaoController.class

整个时候会在当前路径下生成带目录的文件夹以及目标文件

3.将新ZentaoController.class文件替换到目标路径下,替换掉老的文件

cp命令

4.将替换后的文件夹压回jar包(如果是jar文件请记得带上选项 -0)

jar -uvf0 spring.jar BOOT-INF/classes/com/test/springbootest/controller/ZentaoController.class

或者把这个controller包都重新压缩进去:

jar -uvf0 spring.jar BOOT-INF/classes/com/test/springbootest/controller

二、全部解压jar重新打包

1.解压这个jar包

jar -xvf spring.jar 到当前目录

或 unzip spring.jar 

2.进入压缩后的目前 spring,并替换需要替换或者删除的文件

cd spring

cp ...

3.打包完成(把当前目录内的所有文件夹打包,记得带上选项 -0)

jar -cfM0 spring.jar * 

或 jar -cfM0 spring.jar ./BOOT-INF ./META-INF/ ./org/

或 zip -r0 spring.jar *

或 zip -r0 spring.jar ./* -x *.DS_Store (过滤掉mac OS上面的.DS_Store系统文件)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容