#!/bin/bash # ============================================ # XL监狱综合管理平台 - 前后端编译脚本 # ============================================ # 功能: # 1. 编译后端 Java 项目 # 2. 编译前端 Vue3 项目 # 3. 生成部署包 # # 使用方法: # 1. 修改下面的配置(可选) # 2. 执行: bash build.sh # # 依赖: # - Maven 3.8+ # - Node.js 16+ # - pnpm # ============================================ # 配置 PROJECT_DIR="/Volumes/Dpan/github/xlcp" BACKEND_DIR="${PROJECT_DIR}/backend" FRONTEND_DIR="${PROJECT_DIR}/frontend" BACKEND_OUTPUT_DIR="${PROJECT_DIR}/deploy/backend" FRONTEND_OUTPUT_DIR="${PROJECT_DIR}/deploy/frontend" # Maven 配置 MAVEN_PROFILE="prod" JAVA_VERSION="17" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}XL监狱综合管理平台 - 前后端编译脚本${NC}" echo -e "${GREEN}========================================${NC}" echo "" # 检查依赖 echo -e "${BLUE}📋 检查编译环境...${NC}" # 检查 Maven if ! command -v mvn &> /dev/null; then echo -e "${RED}❌ 错误: 未找到 Maven,请先安装 Maven${NC}" exit 1 fi echo -e "${GREEN}✅ Maven 版本: $(mvn -version | head -1)${NC}" # 检查 Node.js if ! command -v node &> /dev/null; then echo -e "${RED}❌ 错误: 未找到 Node.js,请先安装 Node.js${NC}" exit 1 fi echo -e "${GREEN}✅ Node.js 版本: $(node -v)${NC}" # 检查 pnpm if ! command -v pnpm &> /dev/null; then echo -e "${YELLOW}⚠️ 未找到 pnpm,尝试使用 npm...${NC}" PACKAGE_MANAGER="npm" else echo -e "${GREEN}✅ pnpm 版本: $(pnpm -v)${NC}" PACKAGE_MANAGER="pnpm" fi echo "" echo -e "${GREEN}开始编译...${NC}" echo "" # ============================================ # 第一部分:编译后端 # ============================================ echo -e "${BLUE}🏗️ 编译后端项目...${NC}" echo "" cd "${BACKEND_DIR}" # 清理并编译 echo -e "${YELLOW}📦 清理并编译后端...${NC}" mvn clean package -DskipTests -Dmaven.javadoc.skip=true -q if [ $? -eq 0 ]; then echo -e "${GREEN}✅ 后端编译成功!${NC}" # 查找生成的 JAR 文件 JAR_FILE=$(find "${BACKEND_DIR}/yudao-server/target" -name "yudao-server-*.jar" 2>/dev/null | head -1) if [ -n "$JAR_FILE" ]; then echo -e "${GREEN}📁 生成的 JAR 文件: ${JAR_FILE}${NC}" # 复制到部署目录 mkdir -p "${BACKEND_OUTPUT_DIR}" cp "${JAR_FILE}" "${BACKEND_OUTPUT_DIR}/" echo -e "${GREEN}📁 已复制到部署目录: ${BACKEND_OUTPUT_DIR}/$(basename $JAR_FILE)${NC}" fi else echo -e "${RED}❌ 后端编译失败!${NC}" exit 1 fi echo "" # ============================================ # 第二部分:编译前端 # ============================================ echo -e "${BLUE}🎨 编译前端项目...${NC}" echo "" cd "${FRONTEND_DIR}" # 检查依赖是否已安装 if [ ! -d "node_modules" ]; then echo -e "${YELLOW}📥 安装前端依赖...${NC}" $PACKAGE_MANAGER install if [ $? -ne 0 ]; then echo -e "${RED}❌ 前端依赖安装失败!${NC}" exit 1 fi fi # 清理并编译生产版本 echo -e "${YELLOW}📦 编译前端生产版本...${NC}" $PACKAGE_MANAGER build:prod if [ $? -eq 0 ]; then echo -e "${GREEN}✅ 前端编译成功!${NC}" # 复制到部署目录 mkdir -p "${FRONTEND_OUTPUT_DIR}" # 复制编译产物 if [ -d "dist" ]; then rm -rf "${FRONTEND_OUTPUT_DIR}/dist" cp -r "dist" "${FRONTEND_OUTPUT_DIR}/" echo -e "${GREEN}📁 已复制到部署目录: ${FRONTEND_OUTPUT_DIR}/dist${NC}" fi else echo -e "${RED}❌ 前端编译失败!${NC}" exit 1 fi echo "" # ============================================ # 完成 # ============================================ echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}🎉 编译完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "${YELLOW}部署文件位置:${NC}" echo -e " - 后端: ${BACKEND_OUTPUT_DIR}/" echo -e " - 前端: ${FRONTEND_OUTPUT_DIR}/dist/" echo "" echo -e "${YELLOW}下一步:${NC}" echo -e " 1. 部署后端 JAR 文件" echo -e " 2. 部署前端静态文件" echo -e " 3. 配置 Nginx" echo ""