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