feat: 添加快速编译脚本 build.sh
优化策略: - 多线程编译(-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秒)
This commit is contained in:
parent
c4b4bf410d
commit
5497e47b25
|
|
@ -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 "$@"
|
||||
Loading…
Reference in New Issue