文章目录[隐藏]
起因
从笔记本传了个jar到服务器,运行的时候才发现配置文件一个ip项填错了。本来很简单的问题,maven重新打包就可以了,但是30多M的jar包就因为一个配置项错了又要重新传一遍,笔记本连的WiFi速度有限,又要个一两分钟。于是想直接在服务器上更新jar包里的配置文件。
方法一,更新jar包文件
最先想到的办法是用命令把jar包解压jar -xvf xxx.jar
修改完毕后重新打包 jar cf xxx.jar *
,本以为是大功告成,执行java -jar xxx.jar
报错
no main manifest attribute,in xxx.jar
经了解需要在MANIFEST.MF
文件添加main方法的类。用maven
打包的话这些都自动配置了。 对比两次生成MANIFEST.MF
文件里边确实少了不少内容项,根据报错内容主要的main方法的类没有指定
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: xxxApp
用jar重新打包的方法肯定是不行了,肯定还有需要注意的细节。又一想我只是要修改配置文件,替换掉jar包里的配置文件就可以了。查了下jar的文档。果然有更新方法:
jar uf xxx.jar BOOT-INF/classes/application-dev.yml
替换之,启动jar,顺顺利利的启动了
方法二,jar重新打包
后来对于最先想到的方法又在网上查了下,也有对应的解决办法,但是会有两个问题要处理
- 阻止jar打包时重新生成清单列表,
-M
不配置配置清单,这样还可以使用maven
生成的配置清单也就是MANIFEST.MF
jar -cfM xxx.jar *
- jar打包时不进行压缩
-0
jar -cfM0 xxx *
压缩的话会有错误,如下:(已被压缩,嵌套的jar文件无需被压缩)
Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'. It has been compressed and nested jar files must be stored without compression.
最终命令:
jar -cfM0 xxx.jar *
参考
- java doc
- 利用jar命令打包和解压
- jar用法
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的〕文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用zip压缩格式 -M 不产生所有项的清单(manifest〕文件 -i 为指定的jar文件产生索引信息 -C 改变到指定的目录,并且包含下列文件
本文地址: https://www.xiongge.club/biancheng/java/1181.html
转载请注明:熊哥club → java更新jar包里的配置文件
©熊哥club,本站推荐使用的主机:阿里云,CDN建议使用七牛云。
关注微信公众号『熊哥club』
免费提供IT技术指导交流
关注博主不迷路~