#!/usr/bin/env bash # ============================================ # 服务管理中心 - 构建 + 打包 + 运行 一键脚本 # ============================================ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ACTION="${1:-run}" # ---------- 颜色 ---------- RED='\033[0;31m' GREEN='\033[0;32m' CYAN='\033[0;36m' NC='\033[0m' info() { echo -e "${CYAN}[INFO]${NC} $*"; } ok() { echo -e "${GREEN}[OK]${NC} $*"; } err() { echo -e "${RED}[ERROR]${NC} $*" >&2; } # ---------- 帮助 ---------- show_usage() { echo "" echo " 用法: ./run.sh [命令]" echo "" echo " 命令:" echo " (无参数) 构建前端 + 打包后端 + 启动服务" echo " build 仅构建前端 + 打包后端(不启动)" echo " run 构建 + 打包 + 启动(同默认行为)" echo " clean 清理所有构建产物和运行时数据" echo " help 显示此帮助信息" echo "" exit 0 } case "$ACTION" in help|-h|--help) show_usage ;; esac echo "" echo "============================================" echo " 服务管理中心 - $ACTION" echo "============================================" echo "" # ---------- 检查环境 ---------- check_cmd() { if ! command -v "$1" &>/dev/null; then err "未找到 $1,请确保已安装并加入 PATH" exit 1 fi } check_cmd java check_cmd mvn check_cmd node # ---------- 清理 ---------- if [ "$ACTION" = "clean" ]; then info "清理前端构建产物..." rm -rf "$SCRIPT_DIR/frontend/dist" rm -rf "$SCRIPT_DIR/backend/src/main/resources/static" info "清理后端构建产物..." rm -rf "$SCRIPT_DIR/backend/target" info "清理运行时数据..." rm -rf "$SCRIPT_DIR/data" echo "" ok "清理完成" exit 0 fi # ---------- 构建前端 ---------- info "[1/4] 安装前端依赖..." cd "$SCRIPT_DIR/frontend" npm install --silent 2>/dev/null info "[2/4] 构建前端..." npx vite build info "[3/4] 复制前端产物到后端静态资源目录..." rm -rf "$SCRIPT_DIR/backend/src/main/resources/static" cp -r "$SCRIPT_DIR/frontend/dist" "$SCRIPT_DIR/backend/src/main/resources/static" # ---------- 打包后端 ---------- info "[4/4] 打包后端 (mvn package)..." cd "$SCRIPT_DIR/backend" mvn package -DskipTests -q echo "" ok "构建打包完成!" echo "" if [ "$ACTION" = "build" ]; then echo "提示: 使用 ./run.sh run 启动服务" exit 0 fi # ---------- 运行 ---------- echo "----------------------------------------" echo " 启动服务 (端口 3945)" echo " 访问 http://localhost:3945" echo " 按 Ctrl+C 停止" echo "----------------------------------------" echo "" cd "$SCRIPT_DIR/backend" exec java -jar target/service-management-1.0.0.jar