You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mcslms/scripts/deploy-tomcat.bat

151 lines
4.3 KiB

@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