build-java.ps1 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # DMS 一体化构建脚本(Java 版)
  2. # 用法:在项目根目录执行 .\build\build-java.ps1
  3. # 产物:dist-package-java\dms-server\(dms-server.jar 内置前端)
  4. [CmdletBinding()]
  5. param(
  6. [switch]$SkipFrontend
  7. )
  8. $ErrorActionPreference = "Stop"
  9. $ProjectRoot = Split-Path $PSScriptRoot -Parent
  10. $Backend = Join-Path $ProjectRoot "backend-java"
  11. $Frontend = Join-Path $ProjectRoot "frontend"
  12. $Dist = Join-Path $ProjectRoot "dist-package-java"
  13. $Templates = Join-Path $PSScriptRoot "java-templates"
  14. Write-Host "========== DMS 一体化构建(Java 版) ==========" -ForegroundColor Cyan
  15. Write-Host "项目根目录: $ProjectRoot"
  16. # ---------- 1. 前端构建 ----------
  17. if (-not $SkipFrontend) {
  18. Write-Host "`n[1/4] 构建前端..." -ForegroundColor Yellow
  19. Push-Location $Frontend
  20. try {
  21. if (-not (Test-Path "node_modules")) {
  22. Write-Host " npm install..." -ForegroundColor DarkGray
  23. npm install
  24. if ($LASTEXITCODE -ne 0) { throw "npm install 失败" }
  25. }
  26. npm run build
  27. if ($LASTEXITCODE -ne 0) { throw "前端构建失败" }
  28. } finally { Pop-Location }
  29. } else {
  30. Write-Host "`n[1/4] 跳过前端构建 (-SkipFrontend)" -ForegroundColor DarkGray
  31. }
  32. $indexHtml = Join-Path $Frontend "dist\index.html"
  33. if (-not (Test-Path $indexHtml)) {
  34. throw "前端产物不存在: $indexHtml - 请先执行 npm run build"
  35. }
  36. # ---------- 2. Maven 打包(-Pfrontend 把前端 dist 合入 jar 的 static) ----------
  37. Write-Host "`n[2/4] Maven 打包..." -ForegroundColor Yellow
  38. Push-Location $Backend
  39. try {
  40. mvn -q clean package -Pfrontend
  41. if ($LASTEXITCODE -ne 0) { throw "Maven 打包失败" }
  42. } finally { Pop-Location }
  43. $JarFile = Join-Path $Backend "target\dms-server.jar"
  44. if (-not (Test-Path $JarFile)) { throw "未找到打包产物: $JarFile" }
  45. # ---------- 3. 整理发行包 ----------
  46. Write-Host "`n[3/4] 整理发行包..." -ForegroundColor Yellow
  47. $ReleaseDir = Join-Path $Dist "dms-server"
  48. if (Test-Path $ReleaseDir) { Remove-Item $ReleaseDir -Recurse -Force }
  49. New-Item $ReleaseDir -ItemType Directory | Out-Null
  50. Copy-Item $JarFile $ReleaseDir -Force
  51. # 配置模板与 Python 版共用同一份 .env.example
  52. Copy-Item (Join-Path $ProjectRoot "backend\.env.example") $ReleaseDir -Force
  53. # 启动/升级脚本与说明
  54. Copy-Item (Join-Path $Templates "run.bat") $ReleaseDir -Force
  55. Copy-Item (Join-Path $Templates "run.sh") $ReleaseDir -Force
  56. Copy-Item (Join-Path $Templates "upgrade-db.bat") $ReleaseDir -Force
  57. Copy-Item (Join-Path $Templates "upgrade-db.sh") $ReleaseDir -Force
  58. Copy-Item (Join-Path $Templates "README.txt") $ReleaseDir -Force
  59. # 示例数据库 SQL(与后端语言无关,复用同一导出工具)
  60. $ExportTool = Join-Path $ProjectRoot "tools\export_full_demo_data.py"
  61. $ExportedSql = Join-Path $ReleaseDir "database-init.sql"
  62. if (Test-Path $ExportTool) {
  63. Write-Host " 导出示例数据库 SQL..." -ForegroundColor DarkGray
  64. Push-Location (Join-Path $ProjectRoot "backend")
  65. try {
  66. python $ExportTool --output $ExportedSql 2>&1 | Out-Host
  67. if (-not (Test-Path $ExportedSql)) {
  68. Write-Warning "导出工具未生成 $ExportedSql,请手动准备 SQL 文件"
  69. }
  70. } catch {
  71. Write-Warning "导出工具执行失败:$_"
  72. } finally { Pop-Location }
  73. } else {
  74. Write-Warning "未找到 tools\export_full_demo_data.py,跳过自动导出"
  75. }
  76. # ---------- 4. 从备份恢复 .env 和 dms-storage ----------
  77. Write-Host "`n[4/4] 从备份恢复 .env 和 dms-storage..." -ForegroundColor Yellow
  78. $BackupDir = Join-Path $ProjectRoot "dist-package-java-bak\dms-server"
  79. if (-not (Test-Path $BackupDir)) {
  80. Write-Host " 备份目录不存在: $BackupDir - 跳过恢复" -ForegroundColor DarkGray
  81. } else {
  82. $BackupEnv = Join-Path $BackupDir ".env"
  83. if (Test-Path $BackupEnv) {
  84. Copy-Item $BackupEnv $ReleaseDir -Force
  85. Write-Host " 已恢复 .env" -ForegroundColor DarkGray
  86. } else {
  87. Write-Warning "备份中没有 .env,跳过"
  88. }
  89. $BackupStorage = Join-Path $BackupDir "dms-storage"
  90. if (Test-Path $BackupStorage) {
  91. $TargetStorage = Join-Path $ReleaseDir "dms-storage"
  92. if (Test-Path $TargetStorage) {
  93. Remove-Item $TargetStorage -Recurse -Force
  94. }
  95. Copy-Item $BackupStorage $TargetStorage -Recurse -Force
  96. Write-Host " 已恢复 dms-storage" -ForegroundColor DarkGray
  97. } else {
  98. Write-Warning "备份中没有 dms-storage,跳过"
  99. }
  100. }
  101. Write-Host "`n========== 构建完成(Java 版) ==========" -ForegroundColor Green
  102. Write-Host "发行包目录: $ReleaseDir" -ForegroundColor Green
  103. $sizeMB = [math]::Round((Get-ChildItem $ReleaseDir -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB, 1)
  104. Write-Host "包大小: ${sizeMB} MB" -ForegroundColor Green
  105. Write-Host "将该目录整体压缩即可分发给最终用户" -ForegroundColor Green