| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #!/usr/bin/env bash
- # DMS 一键部署脚本(Java 版):构建前端 + Maven 打包 + 组装发行包
- # 用法:在项目根目录执行 ./build/deploy-java.sh [--skip-frontend]
- set -e
- ROOT="$(cd "$(dirname "$0")/.." && pwd)"
- BACKEND="$ROOT/backend-java"
- FRONTEND="$ROOT/frontend"
- RELEASE="$ROOT/dist-package-java/dms-server"
- TEMPLATES="$ROOT/build/java-templates"
- SKIP_FRONTEND=0
- for arg in "$@"; do
- case "$arg" in
- --skip-frontend|-SkipFrontend) SKIP_FRONTEND=1 ;;
- esac
- done
- echo "========== DMS 一键部署(Java 版) =========="
- echo "项目根目录: $ROOT"
- # ---------- 1. 前端构建 ----------
- if [ "$SKIP_FRONTEND" -eq 0 ]; then
- echo "[1/4] 构建前端..."
- (cd "$FRONTEND" && { [ -d node_modules ] || npm install; } && npm run build)
- else
- echo "[1/4] 跳过前端构建 (--skip-frontend)"
- fi
- [ -f "$FRONTEND/dist/index.html" ] || { echo "错误:前端产物不存在,请先 npm run build"; exit 1; }
- # ---------- 2. Maven 打包 ----------
- echo "[2/4] Maven 打包..."
- (cd "$BACKEND" && mvn -q clean package -Pfrontend)
- [ -f "$BACKEND/target/dms-server.jar" ] || { echo "错误:未找到打包产物 dms-server.jar"; exit 1; }
- # ---------- 3. 整理发行包 ----------
- echo "[3/4] 整理发行包..."
- # 暂存现有 dms-storage:删除发行目录前移出,重打包后自动还原,
- # 避免运行数据每次丢失(mv 同卷瞬时完成;被占用时中止打包而非删数据)
- KEEP_STORAGE="$ROOT/dist-package-java/dms-storage.keep"
- if [ -d "$RELEASE/dms-storage" ]; then
- rm -rf "$KEEP_STORAGE"
- if ! mv "$RELEASE/dms-storage" "$KEEP_STORAGE"; then
- echo "错误:dms-storage 暂存失败(可能被运行中的服务占用),请先停止 dms-server 再打包" >&2
- exit 1
- fi
- fi
- rm -rf "$RELEASE"
- mkdir -p "$RELEASE"
- cp "$BACKEND/target/dms-server.jar" "$RELEASE/"
- cp "$ROOT/backend/.env.example" "$RELEASE/"
- cp "$TEMPLATES/run.bat" "$TEMPLATES/run.sh" "$TEMPLATES/upgrade-db.bat" \
- "$TEMPLATES/upgrade-db.sh" "$TEMPLATES/README.txt" "$RELEASE/"
- if [ -f "$ROOT/tools/export_full_demo_data.py" ]; then
- # 工具三参数均必填:--env-file 提供库连接、--storage 提供文件根、--output 为输出目录
- # (产物含 full_demo_data.sql 与 storage 文件副本),仅取 SQL 进发行包,临时目录用完即删
- EXPORT_ENV=""
- for CAND in "$ROOT/backend/.env" "$ROOT/dist-package-java-bak/dms-server/.env"; do
- if [ -f "$CAND" ]; then EXPORT_ENV="$CAND"; break; fi
- done
- EXPORT_STORAGE="$ROOT/backend/dms-storage"
- if [ -z "$EXPORT_ENV" ]; then
- echo "警告:未找到可用的 .env(backend/.env 或备份目录),跳过导出示例数据库 SQL"
- elif [ ! -d "$EXPORT_STORAGE" ]; then
- echo "警告:未找到存储目录 $EXPORT_STORAGE,跳过导出示例数据库 SQL"
- else
- echo " 导出示例数据库 SQL..."
- EXPORT_TMP="$(mktemp -d)"
- if python "$ROOT/tools/export_full_demo_data.py" \
- --env-file "$EXPORT_ENV" --storage "$EXPORT_STORAGE" --output "$EXPORT_TMP" \
- && [ -f "$EXPORT_TMP/full_demo_data.sql" ]; then
- cp "$EXPORT_TMP/full_demo_data.sql" "$RELEASE/database-init.sql"
- echo " 已生成 database-init.sql"
- else
- echo "警告:导出示例数据库 SQL 失败,跳过"
- fi
- rm -rf "$EXPORT_TMP"
- fi
- fi
- # ---------- 4. 恢复 .env 和 dms-storage ----------
- # 优先级:打包前暂存(原地数据,mv 回)> 备份目录;发行目录已有的 dms-storage 绝不覆盖
- echo "[4/4] 恢复 .env 和 dms-storage..."
- BAK="$ROOT/dist-package-java-bak/dms-server"
- if [ -d "$BAK" ]; then
- [ -f "$BAK/.env" ] && cp "$BAK/.env" "$RELEASE/" && echo " 已恢复 .env"
- else
- echo " 备份目录不存在: $BAK - 跳过备份恢复"
- fi
- if [ -d "$KEEP_STORAGE" ]; then
- mv "$KEEP_STORAGE" "$RELEASE/dms-storage" && echo " 已保留重打包前的 dms-storage"
- elif [ -d "$BAK/dms-storage" ]; then
- cp -r "$BAK/dms-storage" "$RELEASE/" && echo " 已恢复 dms-storage(备份)"
- else
- echo " 无 dms-storage 可恢复(暂存与备份均无),跳过"
- fi
- echo "========== 部署完成(Java 版) =========="
- echo "发行包目录: $RELEASE"
|