#!/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] 整理发行包..." 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 ---------- 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" [ -d "$BAK/dms-storage" ] && cp -r "$BAK/dms-storage" "$RELEASE/" && echo " 已恢复 dms-storage" else echo " 备份目录不存在: $BAK - 跳过恢复" fi echo "========== 部署完成(Java 版) ==========" echo "发行包目录: $RELEASE"