mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-26 21:26:39 +08:00
307 lines
10 KiB
PowerShell
307 lines
10 KiB
PowerShell
# 开发环境优化启动脚本 v2.0
|
|
# 智能检测变化,快速启动应用
|
|
# 使用方法: .\dev-start.ps1
|
|
|
|
param(
|
|
[string]$Profile = "dev",
|
|
[switch]$Debug = $false,
|
|
[switch]$SkipCompile = $false,
|
|
[switch]$ForceCompile = $false,
|
|
[switch]$CleanStart = $false
|
|
)
|
|
|
|
# 设置编码为UTF-8
|
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
$env:JAVA_TOOL_OPTIONS = "-Dfile.encoding=UTF-8"
|
|
|
|
Write-Host "🚀 开发环境智能启动工具 v2.0" -ForegroundColor Green
|
|
Write-Host "====================================" -ForegroundColor Green
|
|
|
|
# 检查环境
|
|
try {
|
|
$javaVersion = java -version 2>&1 | Select-String "version" | Select-Object -First 1
|
|
Write-Host "✅ Java: $javaVersion" -ForegroundColor Cyan
|
|
|
|
$mavenVersion = mvn -version 2>&1 | Select-String "Apache Maven" | Select-Object -First 1
|
|
Write-Host "✅ Maven: $mavenVersion" -ForegroundColor Cyan
|
|
}
|
|
catch {
|
|
Write-Host "❌ 请确保Java和Maven已正确安装并配置环境变量" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# 智能检测是否需要编译
|
|
function Test-NeedCompile {
|
|
if ($ForceCompile) {
|
|
Write-Host "🔄 强制编译模式" -ForegroundColor Yellow
|
|
return $true
|
|
}
|
|
|
|
if ($SkipCompile) {
|
|
Write-Host "⏭️ 跳过编译检测" -ForegroundColor Yellow
|
|
return $false
|
|
}
|
|
|
|
# 检查是否存在编译产物
|
|
$adminJar = "ruoyi-admin/target/classes"
|
|
if (-not (Test-Path $adminJar)) {
|
|
Write-Host "📦 未找到编译产物,需要编译" -ForegroundColor Yellow
|
|
return $true
|
|
}
|
|
|
|
# 检查关键文件的修改时间
|
|
$sourceFiles = @(
|
|
"ruoyi-admin/src/main/java",
|
|
"ruoyi-modules/ruoyi-system/src/main/java",
|
|
"ruoyi-modules/ruoyi-pms/src/main/java",
|
|
"ruoyi-common"
|
|
)
|
|
|
|
$lastCompileTime = (Get-Item $adminJar).LastWriteTime
|
|
|
|
foreach ($sourceDir in $sourceFiles) {
|
|
if (Test-Path $sourceDir) {
|
|
$latestSource = Get-ChildItem -Path $sourceDir -Recurse -File -Include "*.java" |
|
|
Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
|
|
if ($latestSource -and $latestSource.LastWriteTime -gt $lastCompileTime) {
|
|
Write-Host "🔄 检测到源码变化: $($latestSource.Name)" -ForegroundColor Yellow
|
|
return $true
|
|
}
|
|
}
|
|
}
|
|
|
|
Write-Host "✅ 无需重新编译,使用现有编译产物" -ForegroundColor Green
|
|
return $false
|
|
}
|
|
|
|
# 修复YAML配置文件中的占位符
|
|
function Fix-YamlPlaceholders {
|
|
Write-Host "🔧 修复YAML配置占位符..." -ForegroundColor Yellow
|
|
|
|
# 定义占位符替换映射
|
|
$placeholders = @{
|
|
'@logging\.level@' = 'info'
|
|
'@profiles\.active@' = $Profile
|
|
'@monitor\.username@' = 'ruoyi'
|
|
'@monitor\.password@' = '123456'
|
|
}
|
|
|
|
# 需要修复的配置文件列表
|
|
$configFiles = @(
|
|
"ruoyi-admin/src/main/resources/application.yml",
|
|
"ruoyi-admin/src/main/resources/application-dev.yml",
|
|
"ruoyi-admin/src/main/resources/application-prod.yml"
|
|
)
|
|
|
|
$fixedCount = 0
|
|
|
|
foreach ($configFile in $configFiles) {
|
|
if (Test-Path $configFile) {
|
|
$content = Get-Content $configFile -Raw -Encoding UTF8
|
|
$originalContent = $content
|
|
|
|
# 替换所有占位符
|
|
foreach ($placeholder in $placeholders.Keys) {
|
|
$replacement = $placeholders[$placeholder]
|
|
$content = $content -replace $placeholder, $replacement
|
|
}
|
|
|
|
# 如果内容有变化,写回文件
|
|
if ($content -ne $originalContent) {
|
|
Set-Content $configFile -Value $content -Encoding UTF8
|
|
$fixedCount++
|
|
Write-Host " ✅ 已修复: $configFile" -ForegroundColor Green
|
|
}
|
|
}
|
|
}
|
|
|
|
# 修复common-mybatis.yml中缺失的mapperPackage配置
|
|
$commonMybatisFile = "ruoyi-common/ruoyi-common-mybatis/src/main/resources/common-mybatis.yml"
|
|
if (Test-Path $commonMybatisFile) {
|
|
$content = Get-Content $commonMybatisFile -Raw -Encoding UTF8
|
|
|
|
# 检查是否已经包含mapperPackage配置
|
|
if ($content -notmatch "mapperPackage:") {
|
|
# 在mybatis-plus配置块中添加mapperPackage
|
|
$mapperPackageConfig = "`n # 多包名使用 例如 org.dromara.**.mapper,org.xxx.**.mapper`n mapperPackage: org.dromara.**.mapper"
|
|
$content = $content -replace "(mybatis-plus:)", "`$1$mapperPackageConfig"
|
|
|
|
Set-Content $commonMybatisFile -Value $content -Encoding UTF8
|
|
$fixedCount++
|
|
Write-Host " ✅ 已修复: $commonMybatisFile (添加mapperPackage配置)" -ForegroundColor Green
|
|
}
|
|
}
|
|
|
|
if ($fixedCount -gt 0) {
|
|
Write-Host "✅ 已修复 $fixedCount 个配置文件中的占位符" -ForegroundColor Green
|
|
}
|
|
else {
|
|
Write-Host "✅ 配置文件占位符已正确" -ForegroundColor Green
|
|
}
|
|
}
|
|
|
|
# 备份原始pom文件
|
|
function Backup-PomFiles {
|
|
Write-Host "📋 备份原始pom文件..." -ForegroundColor Yellow
|
|
|
|
if (Test-Path "pom.xml.backup") {
|
|
Write-Host "⚠️ 发现已存在的备份文件,跳过备份" -ForegroundColor Yellow
|
|
}
|
|
else {
|
|
Copy-Item "pom.xml" "pom.xml.backup"
|
|
Copy-Item "ruoyi-admin\pom.xml" "ruoyi-admin\pom.xml.backup"
|
|
Copy-Item "ruoyi-modules\pom.xml" "ruoyi-modules\pom.xml.backup"
|
|
Write-Host "✅ 备份完成" -ForegroundColor Green
|
|
}
|
|
}
|
|
|
|
# 切换到开发环境配置
|
|
function Switch-ToDevConfig {
|
|
Write-Host "🔄 切换到开发环境配置..." -ForegroundColor Yellow
|
|
|
|
Copy-Item "pom-dev.xml" "pom.xml" -Force
|
|
Copy-Item "ruoyi-admin\pom-dev.xml" "ruoyi-admin\pom.xml" -Force
|
|
Copy-Item "ruoyi-modules\pom-dev.xml" "ruoyi-modules\pom.xml" -Force
|
|
|
|
Write-Host "✅ 已切换到开发环境配置" -ForegroundColor Green
|
|
}
|
|
|
|
# 恢复原始配置
|
|
function Restore-OriginalConfig {
|
|
Write-Host "🔄 恢复原始配置..." -ForegroundColor Yellow
|
|
|
|
if (Test-Path "pom.xml.backup") {
|
|
Copy-Item "pom.xml.backup" "pom.xml" -Force
|
|
Copy-Item "ruoyi-admin\pom.xml.backup" "ruoyi-admin\pom.xml" -Force
|
|
Copy-Item "ruoyi-modules\pom.xml.backup" "ruoyi-modules\pom.xml" -Force
|
|
|
|
Remove-Item "pom.xml.backup"
|
|
Remove-Item "ruoyi-admin\pom.xml.backup"
|
|
Remove-Item "ruoyi-modules\pom.xml.backup"
|
|
|
|
Write-Host "✅ 已恢复原始配置" -ForegroundColor Green
|
|
}
|
|
}
|
|
|
|
# 快速编译项目
|
|
function Compile-Project {
|
|
Write-Host "🔨 开始快速编译..." -ForegroundColor Blue
|
|
$startTime = Get-Date
|
|
|
|
# 清理缓存(如果需要)
|
|
if ($CleanStart) {
|
|
Write-Host "🧹 清理编译缓存..." -ForegroundColor Yellow
|
|
& mvn clean -q
|
|
}
|
|
|
|
# 优化的编译参数
|
|
$mvnParams = @(
|
|
"compile",
|
|
"resources:resources",
|
|
"-T", "2C", # 并行编译
|
|
"-DskipTests=true", # 跳过测试
|
|
"-Dmaven.compile.fork=true", # 启用编译进程分叉
|
|
"-Dmaven.javadoc.skip=true", # 跳过javadoc
|
|
"-Dmaven.source.skip=true", # 跳过源码打包
|
|
"-q" # 静默模式
|
|
)
|
|
|
|
& mvn $mvnParams
|
|
|
|
if ($LASTEXITCODE -eq 0) {
|
|
$endTime = Get-Date
|
|
$duration = $endTime - $startTime
|
|
Write-Host "✅ 编译成功! 耗时: $($duration.TotalSeconds.ToString('F2'))秒" -ForegroundColor Green
|
|
}
|
|
else {
|
|
Write-Host "❌ 编译失败!" -ForegroundColor Red
|
|
throw "编译失败"
|
|
}
|
|
}
|
|
|
|
# 启动应用
|
|
function Start-Application {
|
|
Write-Host "🎯 启动范围: 核心模块 + PMS模块" -ForegroundColor Yellow
|
|
Write-Host "📦 跳过模块: monitor、workflow、demo、generator、job" -ForegroundColor Yellow
|
|
Write-Host "🌍 运行环境: $Profile" -ForegroundColor Yellow
|
|
|
|
# 优化的启动参数
|
|
$mvnParams = @(
|
|
"spring-boot:run",
|
|
"-pl", "ruoyi-admin",
|
|
"-Dspring.profiles.active=$Profile",
|
|
"-Dspring-boot.run.fork=false", # 不分叉进程,减少启动时间
|
|
"-Dspring-boot.run.optimizedLaunch=true" # 优化启动
|
|
)
|
|
|
|
if ($Debug) {
|
|
Write-Host "🐛 启用调试模式 (端口: 5005)" -ForegroundColor Yellow
|
|
$mvnParams += "-Dspring-boot.run.jvmArguments=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
|
|
}
|
|
|
|
# 显示启动命令
|
|
$cmdString = "mvn " + ($mvnParams -join " ")
|
|
Write-Host "🔧 执行命令: $cmdString" -ForegroundColor Cyan
|
|
|
|
Write-Host "⏱️ 启动应用..." -ForegroundColor Blue
|
|
Write-Host "🌐 应用将在启动完成后可通过 http://localhost:8080 访问" -ForegroundColor Cyan
|
|
|
|
& mvn $mvnParams
|
|
}
|
|
|
|
# 显示使用帮助
|
|
function Show-Usage {
|
|
Write-Host "`n📖 使用说明:" -ForegroundColor Cyan
|
|
Write-Host " .\dev-start.ps1 # 智能启动(推荐)"
|
|
Write-Host " .\dev-start.ps1 -SkipCompile # 跳过编译直接启动"
|
|
Write-Host " .\dev-start.ps1 -ForceCompile # 强制重新编译"
|
|
Write-Host " .\dev-start.ps1 -CleanStart # 清理后重新编译启动"
|
|
Write-Host " .\dev-start.ps1 -Debug # 启用调试模式"
|
|
Write-Host " .\dev-start.ps1 -Profile prod # 指定运行环境"
|
|
}
|
|
|
|
# 主逻辑
|
|
try {
|
|
# 显示启动模式
|
|
if ($SkipCompile) {
|
|
Write-Host "🚀 快速启动模式 (跳过编译)" -ForegroundColor Magenta
|
|
}
|
|
elseif ($ForceCompile) {
|
|
Write-Host "🔄 强制编译模式" -ForegroundColor Magenta
|
|
}
|
|
elseif ($CleanStart) {
|
|
Write-Host "🧹 清理重启模式" -ForegroundColor Magenta
|
|
}
|
|
else {
|
|
Write-Host "🧠 智能检测模式" -ForegroundColor Magenta
|
|
}
|
|
|
|
# 备份并切换配置
|
|
Backup-PomFiles
|
|
Switch-ToDevConfig
|
|
|
|
# 修复YAML占位符
|
|
Fix-YamlPlaceholders
|
|
|
|
# 智能编译检测
|
|
$needCompile = Test-NeedCompile
|
|
if ($needCompile) {
|
|
Compile-Project
|
|
}
|
|
|
|
# 启动应用
|
|
Start-Application
|
|
}
|
|
catch {
|
|
Write-Host "❌ 启动过程中发生错误: $($_.Exception.Message)" -ForegroundColor Red
|
|
Show-Usage
|
|
exit 1
|
|
}
|
|
finally {
|
|
# 恢复原始配置
|
|
Restore-OriginalConfig
|
|
}
|
|
|
|
Write-Host "🎉 应用已启动!" -ForegroundColor Green
|