这里针对的是java打包后的jar包,其他不确定. jar程序在发布后发现有小bug,但是程序整体的重新打包和发布,上传,有时候比较耗时. 这个场景就很好用.
说明:
- jar包为test.jar,被替换的文件 test.class
- jar这个命令是jdk下/bin/下的命令
1.解压
jar xvf test.jar
解压后解压出三个文件夹: BOOT-INF,META-INF,org
2.替换.class文件
找到需要被修改的.class文件,直接替换
3.重新压缩
jar cvfM0 ./test.jar ./BOOT-INF/ ./META-INF/ ./org/
重新压缩成test.jar,完成
- 命令含义:c = 创建新包(Create),v = 详细输出,f = 指定文件名,m = 包含清单文件(Manifest),0 = 不压缩(Store only)。
- 关键点 0:必须加!
如果不加 0,JAR 工具会对文件进行 DEFLATE 压缩。
Spring Boot 等框架构建的可执行 JAR/WAR,内部文件通常已被预压缩,再次压缩可能导致程序启动报错或校验失败。
cvfm0 后的参数顺序严格对应:目标包名 -> 清单文件路径 -> 要打包的目录
4.效果
重新压缩后的jar会比原jar大很多,这个是正常. 运行无任何区别