@echo off chcp 65001 >nul setlocal EnableDelayedExpansion :: ============================================ :: MCSLMS Web 应用本地 Tomcat 部署脚本 :: ============================================ :: :: 使用方法: :: 1. 先构建项目: gradlew :backend:bootWar :: 2. 运行本脚本: scripts\deploy-tomcat.bat :: :: 配置: :: 修改下方的 TOMCAT_HOME 变量为你的 Tomcat 安装路径 :: :: ========== 配置区域 ========== set "TOMCAT_HOME=E:\2025-2026\GitAIOps\tomcat" set "APP_NAME=mcslms" set "PROJECT_ROOT=%~dp0.." :: ========== 变量定义 ========== set "TOMCAT_WEBAPPS=%TOMCAT_HOME%\webapps" set "TOMCAT_BIN=%TOMCAT_HOME%\bin" set "WAR_SOURCE=%PROJECT_ROOT%\backend\build\libs" echo. echo ============================================ echo MCSLMS Web 应用部署到 Tomcat echo ============================================ echo. echo 配置信息: echo - Tomcat 路径: %TOMCAT_HOME% echo - 应用名称: %APP_NAME% echo - 项目根目录: %PROJECT_ROOT% echo. :: ========== 检查 Tomcat ========== echo [1/7] 检查 Tomcat 安装... if not exist "%TOMCAT_HOME%" ( echo ✗ 错误: Tomcat 目录不存在: %TOMCAT_HOME% echo 请修改脚本中的 TOMCAT_HOME 变量 goto :error ) if not exist "%TOMCAT_BIN%\catalina.bat" ( echo ✗ 错误: 找不到 catalina.bat goto :error ) echo ✓ Tomcat 已找到 echo. :: ========== 查找 WAR 文件 ========== echo [2/7] 查找 WAR 文件... set "WAR_FILE=" for %%f in ("%WAR_SOURCE%\mcslms-web-*.war") do ( set "WAR_FILE=%%f" ) if not defined WAR_FILE ( echo ✗ 错误: 找不到 WAR 文件 echo 请先运行: gradlew :backend:bootWar goto :error ) echo ✓ 找到 WAR 文件: %WAR_FILE% echo. :: ========== 停止 Tomcat ========== echo [3/7] 停止 Tomcat (如果正在运行)... call "%TOMCAT_BIN%\shutdown.bat" 2>nul timeout /t 3 /nobreak >nul :: 检查并终止占用 8080 端口的进程 for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080 ^| findstr LISTENING 2^>nul') do ( if not "%%a"=="0" ( echo 终止占用端口 8080 的进程 PID: %%a taskkill /F /PID %%a 2>nul ) ) echo ✓ Tomcat 已停止 echo. :: ========== 清理旧应用 ========== echo [4/7] 清理旧应用... if exist "%TOMCAT_WEBAPPS%\%APP_NAME%.war" ( del /F /Q "%TOMCAT_WEBAPPS%\%APP_NAME%.war" echo ✓ 删除旧 WAR 包 ) if exist "%TOMCAT_WEBAPPS%\%APP_NAME%" ( rmdir /S /Q "%TOMCAT_WEBAPPS%\%APP_NAME%" echo ✓ 删除旧应用目录 ) echo. :: ========== 部署新 WAR ========== echo [5/7] 部署新 WAR 包... copy /Y "%WAR_FILE%" "%TOMCAT_WEBAPPS%\%APP_NAME%.war" >nul if errorlevel 1 ( echo ✗ 错误: 复制 WAR 文件失败 goto :error ) echo ✓ WAR 包已部署 echo. :: ========== 复制数据库 ========== echo [6/7] 复制数据库文件... if exist "%PROJECT_ROOT%\data\library.db" ( copy /Y "%PROJECT_ROOT%\data\library.db" "%TOMCAT_BIN%\library.db" >nul echo ✓ 数据库已复制到 Tomcat bin 目录 ) else ( echo ⚠️ 警告: 未找到 data\library.db ) echo. :: ========== 启动 Tomcat ========== echo [7/7] 启动 Tomcat... set "CATALINA_HOME=%TOMCAT_HOME%" start "Tomcat-MCSLMS" "%TOMCAT_BIN%\catalina.bat" run echo ✓ Tomcat 正在启动... echo. :: ========== 等待启动 ========== echo 等待 Tomcat 启动 (20秒)... timeout /t 20 /nobreak >nul echo. :: ========== 验证部署 ========== echo 验证应用访问... powershell -NoLogo -NoProfile -Command "try { $response = Invoke-WebRequest -Uri 'http://localhost:8080/%APP_NAME%/' -UseBasicParsing -TimeoutSec 10; if ($response.StatusCode -eq 200) { Write-Host '✓ 部署成功!' -ForegroundColor Green } else { Write-Host '✗ 访问失败' -ForegroundColor Red } } catch { Write-Host '⚠️ 无法访问:' $_.Exception.Message -ForegroundColor Yellow }" echo. :: ========== 完成 ========== echo ============================================ echo 部署完成! echo ============================================ echo. echo 访问地址: http://localhost:8080/%APP_NAME%/ echo Tomcat日志: %TOMCAT_HOME%\logs\catalina.out echo. echo 停止命令: %TOMCAT_BIN%\shutdown.bat echo. goto :end :error echo. echo ============================================ echo 部署失败!请检查上述错误信息 echo ============================================ exit /b 1 :end endlocal