mirror of
https://github.com/YunaiV/ruoyi-vue-pro.git
synced 2025-10-28 04:26:02 +08:00
333 lines
7.7 KiB
Bash
Executable File
333 lines
7.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 芋道项目开发工具脚本
|
||
# 用法: ./dev-tools.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_NAME="芋道项目"
|
||
PROJECT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
||
SERVER_DIR="$PROJECT_DIR/yudao-server"
|
||
TARGET_DIR="$SERVER_DIR/target"
|
||
|
||
# 打印带颜色的消息
|
||
print_info() {
|
||
echo -e "${BLUE}[INFO]${NC} $1"
|
||
}
|
||
|
||
print_success() {
|
||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# 显示帮助信息
|
||
show_help() {
|
||
echo -e "${GREEN}$PROJECT_NAME 开发工具${NC}"
|
||
echo
|
||
echo "用法: $0 [命令]"
|
||
echo
|
||
echo "可用命令:"
|
||
echo " build - 构建项目"
|
||
echo " run - 运行项目"
|
||
echo " clean - 清理项目"
|
||
echo " test - 运行测试"
|
||
echo " package - 打包项目"
|
||
echo " docker-build - 构建Docker镜像"
|
||
echo " check-env - 检查开发环境"
|
||
echo " init-db - 初始化数据库"
|
||
echo " logs - 查看应用日志"
|
||
echo " health - 健康检查"
|
||
echo " restart - 重启应用"
|
||
echo " help - 显示此帮助信息"
|
||
echo
|
||
echo "示例:"
|
||
echo " $0 build # 构建项目"
|
||
echo " $0 run # 运行项目"
|
||
echo " $0 health # 检查应用健康状态"
|
||
}
|
||
|
||
# 检查开发环境
|
||
check_env() {
|
||
print_info "检查开发环境..."
|
||
|
||
# 检查Java
|
||
if command -v java &> /dev/null; then
|
||
JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f 2)
|
||
print_success "Java版本: $JAVA_VERSION"
|
||
else
|
||
print_error "Java未安装或未添加到PATH"
|
||
return 1
|
||
fi
|
||
|
||
# 检查Maven
|
||
if command -v mvn &> /dev/null; then
|
||
MVN_VERSION=$(mvn -version | head -n 1 | cut -d' ' -f 3)
|
||
print_success "Maven版本: $MVN_VERSION"
|
||
else
|
||
print_error "Maven未安装或未添加到PATH"
|
||
return 1
|
||
fi
|
||
|
||
# 检查MySQL
|
||
if command -v mysql &> /dev/null; then
|
||
print_success "MySQL已安装"
|
||
else
|
||
print_warning "MySQL未找到,请确保已安装"
|
||
fi
|
||
|
||
# 检查Redis
|
||
if command -v redis-cli &> /dev/null; then
|
||
print_success "Redis已安装"
|
||
else
|
||
print_warning "Redis未找到,请确保已安装"
|
||
fi
|
||
|
||
# 检查端口占用
|
||
if lsof -i :48080 &> /dev/null; then
|
||
print_warning "端口48080已被占用"
|
||
else
|
||
print_success "端口48080可用"
|
||
fi
|
||
|
||
print_success "环境检查完成"
|
||
}
|
||
|
||
# 构建项目
|
||
build_project() {
|
||
print_info "开始构建项目..."
|
||
cd "$PROJECT_DIR"
|
||
|
||
if mvn clean compile -Dmaven.test.skip=true; then
|
||
print_success "项目构建成功"
|
||
else
|
||
print_error "项目构建失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 运行项目
|
||
run_project() {
|
||
print_info "启动项目..."
|
||
cd "$SERVER_DIR"
|
||
|
||
# 检查是否已构建
|
||
if [ ! -f "target/yudao-server.jar" ]; then
|
||
print_info "JAR文件不存在,开始构建..."
|
||
cd "$PROJECT_DIR"
|
||
mvn clean package -Dmaven.test.skip=true
|
||
fi
|
||
|
||
cd "$SERVER_DIR"
|
||
print_info "启动应用..."
|
||
|
||
# 设置JVM参数
|
||
JAVA_OPTS="-Xms512m -Xmx1g -XX:+UseG1GC"
|
||
APP_OPTS="--spring.profiles.active=local"
|
||
|
||
java $JAVA_OPTS -jar target/yudao-server.jar $APP_OPTS
|
||
}
|
||
|
||
# 清理项目
|
||
clean_project() {
|
||
print_info "清理项目..."
|
||
cd "$PROJECT_DIR"
|
||
|
||
if mvn clean; then
|
||
print_success "项目清理完成"
|
||
else
|
||
print_error "项目清理失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 运行测试
|
||
run_tests() {
|
||
print_info "运行测试..."
|
||
cd "$PROJECT_DIR"
|
||
|
||
if mvn test; then
|
||
print_success "测试运行完成"
|
||
else
|
||
print_error "测试运行失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 打包项目
|
||
package_project() {
|
||
print_info "打包项目..."
|
||
cd "$PROJECT_DIR"
|
||
|
||
if mvn clean package -Dmaven.test.skip=true; then
|
||
print_success "项目打包完成"
|
||
echo "JAR文件位置: $TARGET_DIR/yudao-server.jar"
|
||
else
|
||
print_error "项目打包失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 构建Docker镜像
|
||
docker_build() {
|
||
print_info "构建Docker镜像..."
|
||
|
||
# 先打包项目
|
||
package_project
|
||
|
||
cd "$SERVER_DIR"
|
||
if docker build -t yudao-server:latest .; then
|
||
print_success "Docker镜像构建完成"
|
||
docker images | grep yudao-server
|
||
else
|
||
print_error "Docker镜像构建失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 初始化数据库
|
||
init_database() {
|
||
print_info "初始化数据库..."
|
||
|
||
read -p "请输入MySQL用户名 [root]: " DB_USER
|
||
DB_USER=${DB_USER:-root}
|
||
|
||
read -s -p "请输入MySQL密码: " DB_PASSWORD
|
||
echo
|
||
|
||
read -p "请输入数据库名 [ruoyi_vue_pro]: " DB_NAME
|
||
DB_NAME=${DB_NAME:-ruoyi_vue_pro}
|
||
|
||
# 创建数据库
|
||
mysql -u"$DB_USER" -p"$DB_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS $DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
|
||
|
||
# 导入SQL文件
|
||
if [ -f "$PROJECT_DIR/sql/mysql/ruoyi-vue-pro.sql" ]; then
|
||
mysql -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" < "$PROJECT_DIR/sql/mysql/ruoyi-vue-pro.sql"
|
||
print_success "数据库初始化完成"
|
||
else
|
||
print_error "SQL文件不存在: $PROJECT_DIR/sql/mysql/ruoyi-vue-pro.sql"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 查看日志
|
||
view_logs() {
|
||
LOG_FILE="$SERVER_DIR/logs/app.log"
|
||
|
||
if [ -f "$LOG_FILE" ]; then
|
||
print_info "查看应用日志 (Ctrl+C 退出)..."
|
||
tail -f "$LOG_FILE"
|
||
else
|
||
print_warning "日志文件不存在: $LOG_FILE"
|
||
print_info "尝试查看Maven运行日志..."
|
||
find "$PROJECT_DIR" -name "*.log" -type f -exec tail -f {} +
|
||
fi
|
||
}
|
||
|
||
# 健康检查
|
||
health_check() {
|
||
print_info "执行健康检查..."
|
||
|
||
# 检查端口
|
||
if lsof -i :48080 &> /dev/null; then
|
||
print_success "应用端口48080正在监听"
|
||
|
||
# 检查应用状态
|
||
if curl -s http://localhost:48080/actuator/health &> /dev/null; then
|
||
print_success "应用健康状态正常"
|
||
print_info "访问地址:"
|
||
echo " - 后端API: http://localhost:48080"
|
||
echo " - 接口文档: http://localhost:48080/doc.html"
|
||
else
|
||
print_warning "应用健康检查失败"
|
||
fi
|
||
else
|
||
print_error "应用未启动或端口48080未监听"
|
||
fi
|
||
}
|
||
|
||
# 重启应用
|
||
restart_app() {
|
||
print_info "重启应用..."
|
||
|
||
# 查找Java进程
|
||
PID=$(jps | grep yudao-server | awk '{print $1}')
|
||
|
||
if [ -n "$PID" ]; then
|
||
print_info "停止应用 (PID: $PID)..."
|
||
kill "$PID"
|
||
sleep 3
|
||
fi
|
||
|
||
print_info "启动应用..."
|
||
run_project
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
case "$1" in
|
||
build)
|
||
build_project
|
||
;;
|
||
run)
|
||
run_project
|
||
;;
|
||
clean)
|
||
clean_project
|
||
;;
|
||
test)
|
||
run_tests
|
||
;;
|
||
package)
|
||
package_project
|
||
;;
|
||
docker-build)
|
||
docker_build
|
||
;;
|
||
check-env)
|
||
check_env
|
||
;;
|
||
init-db)
|
||
init_database
|
||
;;
|
||
logs)
|
||
view_logs
|
||
;;
|
||
health)
|
||
health_check
|
||
;;
|
||
restart)
|
||
restart_app
|
||
;;
|
||
help|--help|-h)
|
||
show_help
|
||
;;
|
||
"")
|
||
show_help
|
||
;;
|
||
*)
|
||
print_error "未知命令: $1"
|
||
echo
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# 执行主函数
|
||
main "$@" |