场景描述

项目已封板,却突然被告知要修改与某平台的交互参数。最简单的方式就是修改代码,并重写丄包。经过几番确认,这种非必须(ps:他们觉得可以直接修改jar包or war包里配置文件)的修改不允许修改master,被无情拒绝了。只见二十几个项目组都在修改配置文件。内心有句话不知当讲不当讲~~

难点分析

本次与一般的情况不同。项目使用maven管理依赖,并将代码按业务划分了几个module,并且部署时是jar包部署。本次需要修改的配置文件。(file.properties )和启动类不在同一个module下,即 file.properties 在项目部署jar( app.jar )里面的一个jar包( pack.jar )里面,被套了两层。
普通的一层jar可直接vim修改,见最终方案里的修改file.properties部分

几种尝试

方法一:vim修改

先尝试vi修改,不知是编码还是其他原因,四个环境中有两个环境为乱码,无法修改。
后尝试vim进行修改,进入app.jar后,无法直接编辑 pack.jar 。
故,失败!

方法二:使用win

将jar包下载至win解压一次得到 pack.jar,再使用压缩软件对 file.properties 进行编辑,然后替换原 pack.jar,得到新的app.jar包。
运行最新jar包时,报错显示 pack.jar 包被压缩过,无法运行该jar包。
故,失败!

方法三:先提取后替换

使用 jar xf 项目部署jar pack.jar 命令获取到pack.jar后,
再使用 vim pack.jar 对 file.properties 进行修改,
最后使用 jar uf 项目部署jar pack.jar 命令替换原来的pack.jar,
激动人心的时刻到了!好吧,还是启动失败,再次报错显示 pack.jar 包被压缩过,无法运行该jar包。
故,失败!

方法四:在linux解压后vim修改并重新打包

根据二、三的错误信息,决定解决这个隐藏的压缩操作。
选择在linux下直接解压app.jar后,再使用vim对pack.jar进行修改,编辑file.properties文件,最后重新打包。
这次成功了!!!!

最终方案

如上方法四中所述,以下为相关命令:

unzip app.jar						// linux 环境解压人app.jar
rm -rf app,jar						// 删除原app.jar
cd BOOT-INF/lib/					// 进入pack.jar所在目录
vim pack.jar						// 进入pack.jar
/file.properties  					// 回车两次后进入file.properties
									// 此处省略文本修改步骤,:d 就退出jar了
jar cvfm0 app.jar ./META-INF/MANIFEST.MF ./			// 该步骤很重要!!!

通过以上步骤就得到了最新的app.jar,运行成功了!!!

补充

解释一下最后重新打包的命令

jar cvfm0 app.jar ./META-INF/MANIFEST.MF ./	

cvf 重新打包
m0 不压缩
./META-INF/MANIFEST.MF 选择原来的manifest文件,这里面记载一些启动参数,这个东西是必不可少的。如果打包时没有指定,则会生成一个默认的,会无法启动!所以要指定为原来的manifest文件。

ps:linux只会基本部署项目的操作,有错误的地方还望海涵。
欢迎大家提供新的方法或思路,一起学习啦~~~
转载请标明出处哈

Over!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐