From 5497e47b2589f7fecea22bb0fa7af680130a3b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Mon, 2 Feb 2026 19:14:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E8=84=9A=E6=9C=AC=20build.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化策略: - 多线程编译(-T 1C 使用全部CPU核心) - 增量编译(不clean,复用已编译的class) - 模块化编译(-pl -am 仅编译指定模块及其依赖) - 静默模式(-q 减少日志输出) 使用方式: - ./build.sh -q 快速编译(4秒,仅检查语法) - ./build.sh -p 增量打包(4秒) - ./build.sh -f 全量编译 - ./build.sh -m xxx -r 编译模块并重启(27秒) --- backend/build.sh | 219 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100755 backend/build.sh diff --git a/backend/build.sh b/backend/build.sh new file mode 100755 index 0000000..8f735a5 --- /dev/null +++ b/backend/build.sh @@ -0,0 +1,219 @@ +#!/bin/bash +# ============================================================ +# 脚本名称:build.sh +# 功能说明:快速编译打包后端项目,支持多线程、增量、模块化编译 +# 作 者:湖北新华业务中台研发团队 +# 创建时间:2026-02-02 +# 使用方法:./build.sh [选项] +# ============================================================ +set -e + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 项目根目录 +PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$PROJECT_DIR" + +# Maven 通用参数 +MAVEN_OPTS="-Xmx1024m -XX:+TieredCompilation -XX:TieredStopAtLevel=1" +# 多线程编译(CPU核心数) +THREADS="1C" +# 通用参数:跳过测试、静默模式 +COMMON_ARGS="-DskipTests -q" + +# 打印带颜色的消息 +print_info() { echo -e "${BLUE}[INFO]${NC} $1"; } +print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } +print_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +print_error() { echo -e "${RED}[ERROR]${NC} $1"; } + +# 显示帮助信息 +show_help() { + echo "用法: ./build.sh [选项]" + echo "" + echo "选项:" + echo " -f, --full 全量编译(clean + package)" + echo " -q, --quick 快速编译(仅 compile,最快)" + echo " -p, --package 打包(package,不 clean)" + echo " -m, --module 指定模块编译(如: -m pangu-business)" + echo " -r, --restart 编译并重启后端服务" + echo " -c, --clean 仅清理" + echo " -h, --help 显示帮助信息" + echo "" + echo "示例:" + echo " ./build.sh -q # 快速编译检查语法" + echo " ./build.sh -p # 增量打包" + echo " ./build.sh -f # 全量编译" + echo " ./build.sh -m pangu-business -r # 编译业务模块并重启" + echo " ./build.sh -r # 全量编译并重启" +} + +# 快速编译(仅 compile) +quick_compile() { + local module=$1 + print_info "快速编译中(仅检查语法)..." + local start_time=$(date +%s) + + if [ -n "$module" ]; then + print_info "目标模块: $module" + mvn compile -T $THREADS $COMMON_ARGS -pl :$module -am + else + mvn compile -T $THREADS $COMMON_ARGS + fi + + local end_time=$(date +%s) + print_success "编译完成,耗时: $((end_time - start_time)) 秒" +} + +# 增量打包(不 clean) +incremental_package() { + local module=$1 + print_info "增量打包中..." + local start_time=$(date +%s) + + if [ -n "$module" ]; then + print_info "目标模块: $module" + mvn package -T $THREADS $COMMON_ARGS -pl :$module -am + else + mvn package -T $THREADS $COMMON_ARGS + fi + + local end_time=$(date +%s) + print_success "打包完成,耗时: $((end_time - start_time)) 秒" +} + +# 全量编译 +full_build() { + print_info "全量编译中(clean + package)..." + local start_time=$(date +%s) + + mvn clean package -T $THREADS $COMMON_ARGS + + local end_time=$(date +%s) + print_success "全量编译完成,耗时: $((end_time - start_time)) 秒" +} + +# 仅清理 +clean_only() { + print_info "清理中..." + mvn clean -q + print_success "清理完成" +} + +# 重启后端服务 +restart_backend() { + print_info "重启后端服务..." + + # 停止当前运行的服务 + pkill -f "ruoyi-admin.jar" 2>/dev/null || true + sleep 2 + + # 检查 jar 包是否存在 + local jar_file="$PROJECT_DIR/ruoyi-admin/target/ruoyi-admin.jar" + if [ ! -f "$jar_file" ]; then + print_error "找不到 jar 包: $jar_file" + print_warn "请先运行 ./build.sh -p 或 ./build.sh -f 进行打包" + exit 1 + fi + + # 启动服务 + nohup java -jar "$jar_file" > /tmp/ruoyi-admin.log 2>&1 & + print_info "后端启动中,等待服务就绪..." + + # 等待服务启动 + local retry=0 + local max_retry=30 + while [ $retry -lt $max_retry ]; do + if lsof -i :8080 >/dev/null 2>&1; then + print_success "后端服务启动成功!端口: 8080" + return 0 + fi + sleep 1 + retry=$((retry + 1)) + done + + print_error "后端服务启动超时,请检查日志: /tmp/ruoyi-admin.log" + exit 1 +} + +# 主逻辑 +main() { + local action="" + local module="" + local need_restart=false + + # 解析参数 + while [[ $# -gt 0 ]]; do + case $1 in + -f|--full) + action="full" + shift + ;; + -q|--quick) + action="quick" + shift + ;; + -p|--package) + action="package" + shift + ;; + -m|--module) + module="$2" + shift 2 + ;; + -r|--restart) + need_restart=true + shift + ;; + -c|--clean) + action="clean" + shift + ;; + -h|--help) + show_help + exit 0 + ;; + *) + print_error "未知选项: $1" + show_help + exit 1 + ;; + esac + done + + # 默认操作:增量打包 + if [ -z "$action" ] && [ "$need_restart" = true ]; then + action="package" + elif [ -z "$action" ]; then + action="package" + fi + + # 执行操作 + case $action in + full) + full_build + ;; + quick) + quick_compile "$module" + ;; + package) + incremental_package "$module" + ;; + clean) + clean_only + ;; + esac + + # 重启服务 + if [ "$need_restart" = true ]; then + restart_backend + fi +} + +# 执行主函数 +main "$@"