在目前的微服务和容器部署的SpringBoot坏境下,我们一般将项目直接打成 jar包的方式运行(java -jar *),我们可能需要读取resources目录下的自定义文件,想在程序运行时找到该目录,并读取需要的文件。
当时我使用 System.getProperty("user.dir") 获取工作目录的坑,本地idea工具运行没问题,但是一但打成jar包,路径会变成jar包所在的目录,无法读取jar内部的文件, 不建议用这种方式 。
由于jar中的文件都属于资源的一种,所以获取需从类加载器进行获取。正确的姿势是采用 this.getClass().getClassLoader().getResourceAsStream() 的方式。
读取自定义文件时,由于getResourceAsStream方法返回的是一个InputStream流,采用InputStreamReader这种方式 最好指定一种编码方式 ,不然可能 中文乱码 !(我在解析xml时中文乱码)
原文地址: 修改jar包中的配置文件
现有jar包 base-web.jar
查找jar包里面的文件:
jar ftv ks-web-1.0.3.jar | grep pom.xml
要修改jar包中配置文件可以用下面三种方式:
方式一 通过vim命令直接修改保存jar。超方便。
通过vim命令直接编辑jar
vim xxx.jar 该命令首先会列出全部文件,可以通过输入/abc来搜索,定位到对应的abc文件后回车进入配置文件内进行编辑,:wq保存。
方式二 通过jar命令替换jar包中的文件(也可新增)
1.列出jar包中的文件清单
jar tf base-web.jar
2.提取出内部jar包的指定文件
jar xf base-web.jar `jar ft base-web.jar | grep t_ivr_data_bj.json`
3.然后可以修改文件
vim BOOT-INF/classes/realtime/t_ivr_data_bj.json
4.更新配置文件到内部jar包.(存在覆盖,不存在就新增)
jar uf base-web.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json
4.1更新内部jar包到jar文件
jar uf base-web.jar 内部jar包.jar
5.可以查看验证是否已经更改
vim base-web.jar
方式三 解压jar包,修改后重新打包jar
1.解压
unzip base-web.jar
2.移除jar包,最好备份
rm base-web.jar
3.重新打包
jar -cfM0 base-web.jar *
或者
jar -cvfm0 base-web.jar ./META-INF/MANIFEST.MF ./
4.运行
java -jar base-web.jar
jar命令参数:
-c 创建新的存档
-f 指定存档文件名
-M 不配置配置清单,这样还可以使用maven生成的配置清单也就是MANIFEST.MF
-0 不进行压缩,如果压缩会有问题
-m 指定清单文件
-t 列出归档目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
java 中 jar包的修改文件,一般分两种:
第一种 修改jar包中的文件,用压缩工具打开,直接进行修改或替换就可以了。
第二种 修改或替换 jar包的jar包文件 ,具体步骤如下:
解压第一层目录
把对应的jar包解压出来后
打开需要修改的jar包中的文件,修改文件,此时要选择解压工具的文件项,把要添加的文件该成 不直接压缩直接存储文件。
接着把改好的文件放到第一个jar包即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)