355 lines
10 KiB
Bash
Executable File
355 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# =============================================================================
|
|
# RuoYi-Vue-Plus 热启动脚本
|
|
# 功能:启动应用并支持热加载、多环境切换等功能
|
|
# 位置:backend/hot-start.sh
|
|
# 作者:zlwu
|
|
# 时间:2025-07-01
|
|
# =============================================================================
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
PURPLE='\033[0;35m'
|
|
CYAN='\033[0;36m'
|
|
WHITE='\033[1;37m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 默认配置
|
|
DEFAULT_PROFILE="dev"
|
|
DEFAULT_PORT="8080"
|
|
DEFAULT_MODULE="ruoyi-admin"
|
|
MAVEN_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"
|
|
|
|
# 脚本信息
|
|
SCRIPT_NAME="RuoYi热启动脚本"
|
|
SCRIPT_VERSION="1.0.0"
|
|
|
|
# 显示Logo
|
|
show_logo() {
|
|
echo -e "${CYAN}"
|
|
echo "==================================================================================="
|
|
echo " ____ __ ___ _ _ _ _ ____ _ _ "
|
|
echo " | _ \ _ _ ___ | \/ (_) | | | | ___ | |_ / ___|| |_ __ _ _ __| |_ "
|
|
echo " | |_) | | | |/ _ \ | |\/| | |_____| |_| |/ _ \| __| \___ \| __/ _\` | '__| __| "
|
|
echo " | _ <| |_| | (_) || | | | |_____| _ | (_) | |_ ___) | || (_| | | | |_ "
|
|
echo " |_| \_\\\\__,_|\___/ |_| |_|_| |_| |_|\___/ \__| |____/ \__\__,_|_| \__| "
|
|
echo ""
|
|
echo " 🚀 ${SCRIPT_NAME} v${SCRIPT_VERSION} 🚀"
|
|
echo "==================================================================================="
|
|
echo -e "${NC}"
|
|
}
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
echo -e "${WHITE}用法: $0 [选项]${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}选项:${NC}"
|
|
echo -e " ${GREEN}-h, --help${NC} 显示此帮助信息"
|
|
echo -e " ${GREEN}-p, --profile${NC} 指定环境配置 (dev/test/prod,默认: dev)"
|
|
echo -e " ${GREEN}-P, --port${NC} 指定端口号 (默认: 8080)"
|
|
echo -e " ${GREEN}-m, --module${NC} 指定启动模块 (默认: ruoyi-admin)"
|
|
echo -e " ${GREEN}-c, --clean${NC} 清理编译后启动"
|
|
echo -e " ${GREEN}-d, --debug${NC} 启用调试模式"
|
|
echo -e " ${GREEN}-j, --jvm-opts${NC} 自定义JVM参数"
|
|
echo -e " ${GREEN}-t, --test${NC} 测试模式启动"
|
|
echo -e " ${GREEN}--no-hot${NC} 禁用热加载功能"
|
|
echo -e " ${GREEN}--check${NC} 检查环境配置"
|
|
echo ""
|
|
echo -e "${YELLOW}示例:${NC}"
|
|
echo -e " $0 # 使用默认配置启动(开发环境+热加载)"
|
|
echo -e " $0 -p prod # 生产环境启动"
|
|
echo -e " $0 -P 9090 # 指定端口9090启动"
|
|
echo -e " $0 -c # 清理编译后启动"
|
|
echo -e " $0 -d # 调试模式启动"
|
|
echo -e " $0 --no-hot # 禁用热加载启动"
|
|
echo -e " $0 --check # 检查环境配置"
|
|
echo ""
|
|
echo -e "${CYAN}🔥 热加载功能说明:${NC}"
|
|
echo -e " - 开发环境默认启用热加载,修改代码后自动重启"
|
|
echo -e " - 支持Java代码、配置文件、MyBatis映射文件热加载"
|
|
echo -e " - 详细配置见: docs/开发文档/热加载配置说明.md"
|
|
}
|
|
|
|
# 检查环境
|
|
check_environment() {
|
|
echo -e "${BLUE}🔍 检查运行环境...${NC}"
|
|
|
|
# 检查Java版本
|
|
if command -v java &> /dev/null; then
|
|
JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2)
|
|
echo -e " ✅ Java版本: ${GREEN}$JAVA_VERSION${NC}"
|
|
else
|
|
echo -e " ❌ ${RED}未找到Java环境${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# 检查Maven版本
|
|
if command -v mvn &> /dev/null; then
|
|
MVN_VERSION=$(mvn -version 2>/dev/null | head -n 1 | cut -d' ' -f3)
|
|
echo -e " ✅ Maven版本: ${GREEN}$MVN_VERSION${NC}"
|
|
else
|
|
echo -e " ❌ ${RED}未找到Maven环境${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# 检查目标模块
|
|
if [ -d "$DEFAULT_MODULE" ]; then
|
|
echo -e " ✅ 目标模块: ${GREEN}$DEFAULT_MODULE${NC}"
|
|
else
|
|
echo -e " ❌ ${RED}未找到目标模块: $DEFAULT_MODULE${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# 检查热加载配置
|
|
if grep -q "spring-boot-devtools" $DEFAULT_MODULE/pom.xml; then
|
|
echo -e " ✅ 热加载配置: ${GREEN}已启用${NC}"
|
|
else
|
|
echo -e " ⚠️ 热加载配置: ${YELLOW}未配置${NC}"
|
|
fi
|
|
|
|
# 检查配置文件
|
|
CONFIG_FILE="$DEFAULT_MODULE/src/main/resources/application-$DEFAULT_PROFILE.yml"
|
|
if [ -f "$CONFIG_FILE" ]; then
|
|
echo -e " ✅ 配置文件: ${GREEN}$CONFIG_FILE${NC}"
|
|
else
|
|
echo -e " ❌ ${RED}未找到配置文件: $CONFIG_FILE${NC}"
|
|
return 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ 环境检查完成${NC}"
|
|
return 0
|
|
}
|
|
|
|
# 检查端口占用
|
|
check_port() {
|
|
local port=$1
|
|
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
|
|
echo -e "${YELLOW}⚠️ 端口 $port 已被占用${NC}"
|
|
echo -e "${CYAN}正在尝试找到占用进程...${NC}"
|
|
lsof -Pi :$port -sTCP:LISTEN
|
|
echo ""
|
|
read -p "是否要杀死占用进程并继续启动? (y/n): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
echo -e "${YELLOW}正在杀死端口 $port 的占用进程...${NC}"
|
|
lsof -ti:$port | xargs kill -9 2>/dev/null
|
|
sleep 2
|
|
echo -e "${GREEN}✅ 端口已释放${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}❌ 启动已取消${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# 清理编译
|
|
clean_build() {
|
|
echo -e "${BLUE}🧹 清理编译...${NC}"
|
|
cd $DEFAULT_MODULE
|
|
mvn clean > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✅ 清理完成${NC}"
|
|
else
|
|
echo -e "${RED}❌ 清理失败${NC}"
|
|
exit 1
|
|
fi
|
|
cd ..
|
|
}
|
|
|
|
# 构建项目
|
|
build_project() {
|
|
echo -e "${BLUE}🔨 编译并打包项目...${NC}"
|
|
cd $DEFAULT_MODULE
|
|
mvn clean package -q
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✅ 编译打包完成${NC}"
|
|
else
|
|
echo -e "${RED}❌ 编译打包失败${NC}"
|
|
exit 1
|
|
fi
|
|
cd ..
|
|
}
|
|
|
|
# 新增:构建 ruoyi-modules
|
|
build_ruoyi_modules() {
|
|
echo -e "${BLUE}🔨 开始编译并打包 ruoyi-modules...${NC}"
|
|
cd ruoyi-modules
|
|
mvn clean install -q
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✅ ruoyi-modules 编译打包完成${NC}"
|
|
else
|
|
echo -e "${RED}❌ ruoyi-modules 编译打包失败${NC}"
|
|
exit 1
|
|
fi
|
|
cd ..
|
|
}
|
|
|
|
# 启动应用
|
|
start_application() {
|
|
local profile=$1
|
|
local port=$2
|
|
local debug_mode=$3
|
|
local hot_reload=$4
|
|
local jvm_opts=$5
|
|
|
|
echo -e "${BLUE}🚀 启动应用...${NC}"
|
|
echo -e "${CYAN}配置信息:${NC}"
|
|
echo -e " 📂 模块: ${GREEN}$DEFAULT_MODULE${NC}"
|
|
echo -e " 🌍 环境: ${GREEN}$profile${NC}"
|
|
echo -e " 🔌 端口: ${GREEN}$port${NC}"
|
|
echo -e " 🔥 热加载: ${GREEN}$([ "$hot_reload" = "true" ] && echo "启用" || echo "禁用")${NC}"
|
|
echo -e " 🐛 调试模式: ${GREEN}$([ "$debug_mode" = "true" ] && echo "启用" || echo "禁用")${NC}"
|
|
echo ""
|
|
|
|
cd $DEFAULT_MODULE
|
|
|
|
# 构建Maven命令
|
|
MVN_CMD="mvn spring-boot:run"
|
|
|
|
# 添加环境配置
|
|
MVN_CMD="$MVN_CMD -Dspring-boot.run.profiles=$profile"
|
|
|
|
# 添加端口配置
|
|
if [ "$port" != "$DEFAULT_PORT" ]; then
|
|
MVN_CMD="$MVN_CMD -Dspring-boot.run.arguments=--server.port=$port"
|
|
fi
|
|
|
|
# 添加JVM参数
|
|
if [ -n "$jvm_opts" ]; then
|
|
MVN_CMD="$MVN_CMD -Dspring-boot.run.jvmArguments=\"$jvm_opts\""
|
|
else
|
|
MVN_CMD="$MVN_CMD -Dspring-boot.run.jvmArguments=\"$MAVEN_OPTS\""
|
|
fi
|
|
|
|
# 调试模式
|
|
if [ "$debug_mode" = "true" ]; then
|
|
MVN_CMD="$MVN_CMD -Dspring-boot.run.jvmArguments=\"$MAVEN_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005\""
|
|
echo -e "${PURPLE}🐛 调试端口: 5005${NC}"
|
|
fi
|
|
|
|
# 禁用热加载
|
|
if [ "$hot_reload" = "false" ]; then
|
|
MVN_CMD="$MVN_CMD -Dspring.devtools.restart.enabled=false"
|
|
fi
|
|
|
|
echo -e "${CYAN}执行命令: ${WHITE}$MVN_CMD${NC}"
|
|
echo -e "${GREEN}==================== 应用启动日志 ====================${NC}"
|
|
echo ""
|
|
|
|
# 执行命令
|
|
eval $MVN_CMD
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
# 参数解析
|
|
PROFILE="$DEFAULT_PROFILE"
|
|
PORT="$DEFAULT_PORT"
|
|
MODULE="$DEFAULT_MODULE"
|
|
CLEAN_BUILD=false
|
|
DEBUG_MODE=false
|
|
HOT_RELOAD=true
|
|
JVM_OPTS=""
|
|
CHECK_ONLY=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
-p|--profile)
|
|
PROFILE="$2"
|
|
shift 2
|
|
;;
|
|
-P|--port)
|
|
PORT="$2"
|
|
shift 2
|
|
;;
|
|
-m|--module)
|
|
MODULE="$2"
|
|
DEFAULT_MODULE="$2"
|
|
shift 2
|
|
;;
|
|
-c|--clean)
|
|
CLEAN_BUILD=true
|
|
shift
|
|
;;
|
|
-d|--debug)
|
|
DEBUG_MODE=true
|
|
shift
|
|
;;
|
|
-j|--jvm-opts)
|
|
JVM_OPTS="$2"
|
|
shift 2
|
|
;;
|
|
-t|--test)
|
|
PROFILE="test"
|
|
shift
|
|
;;
|
|
--no-hot)
|
|
HOT_RELOAD=false
|
|
shift
|
|
;;
|
|
--check)
|
|
CHECK_ONLY=true
|
|
shift
|
|
;;
|
|
*)
|
|
echo -e "${RED}未知参数: $1${NC}"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# 显示Logo
|
|
show_logo
|
|
|
|
# 仅检查环境
|
|
if [ "$CHECK_ONLY" = "true" ]; then
|
|
check_environment
|
|
exit $?
|
|
fi
|
|
|
|
# 环境检查
|
|
if ! check_environment; then
|
|
echo -e "${RED}❌ 环境检查失败,请检查配置${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# 端口检查
|
|
check_port $PORT
|
|
|
|
# 清理编译
|
|
if [ "$CLEAN_BUILD" = "true" ]; then
|
|
clean_build
|
|
echo ""
|
|
fi
|
|
|
|
# 先编译打包 ruoyi-modules
|
|
build_ruoyi_modules
|
|
echo ""
|
|
|
|
# 再编译打包 ruoyi-admin
|
|
build_project
|
|
echo ""
|
|
|
|
# 启动应用
|
|
start_application "$PROFILE" "$PORT" "$DEBUG_MODE" "$HOT_RELOAD" "$JVM_OPTS"
|
|
}
|
|
|
|
# 错误处理
|
|
trap 'echo -e "\n${YELLOW}⚠️ 应用启动已中断${NC}"; exit 1' INT TERM
|
|
|
|
# 执行主函数
|
|
main "$@"
|