如何通过bash脚本更新.ear文件内部的.jar文件并保存修改后的.ear文件
自动化替换EAR包内指定JAR的Bash脚本方案
前置要求
- 系统已安装
p7zip命令行工具:- Debian/Ubuntu 系执行命令安装:
sudo apt install p7zip-full - RHEL/CentOS/Fedora 系执行命令安装:
sudo dnf install p7zip p7zip-plugins
- Debian/Ubuntu 系执行命令安装:
- 确认本地文件路径符合预期:
- 待修改的EAR包路径:
~/Documents/older.ear - 新版JAR包路径:
~/Documents/libs/updateme.jar - EAR包内需要替换的目标路径:
APP-INF/libs/updateme.jar
- 待修改的EAR包路径:
可用Bash脚本
#!/bin/bash # 自定义配置项,可根据实际路径修改 EAR_PATH="$HOME/Documents/older.ear" NEW_JAR_PATH="$HOME/Documents/libs/updateme.jar" TARGET_PATH_IN_EAR="APP-INF/libs/updateme.jar" # 自动生成备份文件路径,带时间戳防止覆盖 BACKUP_EAR_PATH="${EAR_PATH}.bak.$(date +%Y%m%d%H%M%S)" # 检查7z依赖是否存在 if ! command -v 7z &> /dev/null; then echo "错误:未检测到7z命令行工具,请先安装p7zip后再执行脚本" exit 1 fi # 检查必要文件是否存在 if [ ! -f "$EAR_PATH" ]; then echo "错误:未找到目标EAR文件:$EAR_PATH" exit 1 fi if [ ! -f "$NEW_JAR_PATH" ]; then echo "错误:未找到新版JAR文件:$NEW_JAR_PATH" exit 1 fi # 备份原EAR文件,避免操作失误损坏原始文件 echo "正在备份原EAR文件至:$BACKUP_EAR_PATH" cp "$EAR_PATH" "$BACKUP_EAR_PATH" || { echo "错误:备份EAR文件失败,脚本终止" exit 1 } # 构造临时目录匹配EAR内路径结构 TMP_WORK_DIR=$(mktemp -d) TMP_TARGET_DIR="$TMP_WORK_DIR/$(dirname "$TARGET_PATH_IN_EAR")" mkdir -p "$TMP_TARGET_DIR" cp "$NEW_JAR_PATH" "$TMP_TARGET_DIR/" || { echo "错误:复制新版JAR到临时目录失败" rm -rf "$TMP_WORK_DIR" exit 1 } # 执行EAR包更新操作 echo "正在更新EAR包内的$TARGET_PATH_IN_EAR..." cd "$TMP_WORK_DIR" || exit 1 7z u "$EAR_PATH" APP-INF/ > /dev/null 2>&1 || { echo "错误:更新EAR包失败,已保留原始备份文件" rm -rf "$TMP_WORK_DIR" exit 1 } # 清理临时文件 rm -rf "$TMP_WORK_DIR" echo "操作完成!已成功更新EAR包内的JAR文件" echo "原始文件备份路径:$BACKUP_EAR_PATH"
使用步骤
- 将上述脚本内容保存为
update_ear_jar.sh - 给脚本赋予执行权限:
chmod +x update_ear_jar.sh - 直接执行脚本即可完成替换:
./update_ear_jar.sh
注意事项
- 脚本默认会备份原始EAR包,确认更新后的EAR包可用后可自行删除备份文件
- 若EAR包内原本不存在
APP-INF/libs/updateme.jar路径,脚本会自动新增该路径和对应文件 - 若你的文件路径和示例不一致,修改脚本开头
自定义配置项部分的对应路径即可
内容的提问来源于stack exchange,提问作者Wolf
相关产品推荐
相关产品推荐

