你想在 CentOS 系统上,不重启正在运行的 jar 包的情况下,修改这个 jar 包内部的 doc 文件,这个需求在日常运维中很常见。
实现思路
jar 包本质上是一种压缩文件格式,我们可以通过jar或unzip命令先提取要修改的 doc 文件,编辑完成后再用jar命令将修改后的文件重新打包回原 jar 包,整个过程无需重启 jar 进程。
具体操作步骤
1. 先查看 jar 包内 doc 文件的路径(确认文件位置)
bash
运行
# 列出jar包内所有文件,找到目标doc文件的路径
jar tf your_app.jar | grep .doc
# 示例输出:BOOT-INF/classes/static/docs/readme.doc
替换your_app.jar为你的实际 jar 包名称,grep .doc用于过滤出所有 doc 文件,确认文件在 jar 内的具体路径。
2. 提取 doc 文件到本地
bash
运行
# 提取指定路径的doc文件到当前目录(会保留原目录结构)
jar xf your_app.jar BOOT-INF/classes/static/docs/readme.doc
# 执行后会在当前目录生成 BOOT-INF/classes/static/docs/ 目录,里面有readme.doc
如果没有jar命令,先安装:yum install -y java-1.8.0-openjdk-devel(根据你的 JDK 版本调整)。
3. 编辑 doc 文件
bash
运行
# 用vim编辑(如果是纯文本文档)
vim BOOT-INF/classes/static/docs/readme.doc
# 如果是Word格式的doc文件,建议先下载到本地编辑后再上传:
# 1. 下载文件到本地(用scp)
scp root@你的服务器IP:/当前目录/BOOT-INF/classes/static/docs/readme.doc 本地路径
# 2. 本地编辑完成后上传覆盖
scp 本地路径/readme.doc root@你的服务器IP:/当前目录/BOOT-INF/classes/static/docs/
4. 将修改后的 doc 文件重新打包回 jar 包
bash
运行
# 更新jar包内的指定文件(关键:u参数表示更新,无需解压整个jar)
jar uf your_app.jar BOOT-INF/classes/static/docs/readme.doc
这个命令会直接替换 jar 包内原有 doc 文件,不会影响 jar 包其他内容,也无需重启 jar 进程。
5. 验证修改是否生效
bash
运行
# 再次查看jar包内的doc文件内容(如果是纯文本)
jar xf your_app.jar BOOT-INF/classes/static/docs/readme.doc -O | cat
# -O 参数表示将文件输出到标准输出,直接查看内容是否修改成功
注意事项
- 如果 jar 包被进程占用,
jar uf命令依然可以执行(因为只是修改文件内容,不影响进程读取); - 如果 doc 文件是程序运行时实时读取的(比如前端页面调用),修改后立即生效;如果是程序启动时加载到内存的,可能需要触发程序重新加载(比如接口刷新),但无需重启 jar;
- 操作前建议备份 jar 包:
cp your_app.jar your_app.jar.bak,防止操作失误。
总结
- 核心命令:
jar xf提取文件、jar uf更新 jar 包内文件,无需解压整个 jar; - 操作关键:先确认 doc 文件在 jar 内的路径,修改后用
jar uf直接更新,全程无需重启 jar 进程; - 安全建议:操作前备份 jar 包,避免文件损坏。