pangu-user-platform/backend/build.sh

220 lines
5.7 KiB
Bash
Raw Normal View History

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