pangu-user-platform/backend/build.sh

220 lines
5.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"