能否将XML存入Jar包?Maven构建Jar如何运行时写入XML及编辑内部属性文件
运行时向自身Jar包内写入XML文件是否可行
结论是不可行,原因如下:
- Jar包是ZIP格式的只读归档文件,JVM加载Jar包运行的过程中,不支持直接向正在运行的自身Jar包内写入、修改文件
- 即使强行在进程外修改Jar包内容,也会导致Jar包数字签名失效、下次启动加载异常等问题,不符合常规应用的设计逻辑
- 如果需要存储create命令生成的XML文件,建议选择Jar包外的固定路径(比如当前用户目录、程序启动同级目录)做持久化存储。
依赖Jar包内properties文件的查看与编辑方案
查看操作
- 本地直接查看:使用任意解压软件打开Jar包,找到对应路径下的properties文件直接打开查看
- 代码中读取:通过类加载器加载资源流读取内容,示例代码:
InputStream is = 当前类.class.getClassLoader().getResourceAsStream("Jar包内properties文件的全路径名"); Properties prop = new Properties(); prop.load(is);
编辑操作
优先选择无侵入的类路径覆盖方案,无需修改原Jar包:
- 在你自己项目的resources目录下,建立和Jar包内properties文件完全一致的路径和文件名,写入你需要修改的配置
- 类加载器会优先加载你项目classpath下的同名文件,覆盖Jar包内的默认配置,实现配置自定义效果
如果必须修改原Jar包内的properties文件:
- 用解压工具解压Jar包到临时文件夹
- 找到对应properties文件修改后保存
- 执行Jar命令重新打包:
jar cvf 新Jar包名.jar -C 临时文件夹路径/ . - 注意:如果原Jar包有数字签名,修改后签名会失效,可能出现运行报错,这种场景必须使用类路径覆盖方案。
内容的提问来源于stack exchange,提问作者Fabio。
相关产品推荐
相关产品推荐

