场景描述
项目已封板,却突然被告知要修改与某平台的交互参数。最简单的方式就是修改代码,并重写丄包。经过几番确认,这种非必须(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!
|