From f7a18613438ce6fbac6a7e2525e5a955cb83cf29 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 17 九月 2026 13:19:23 +0800
Subject: [PATCH] fix(scripts): 测试脚本的 -Clean 与 PowerShell 5.1 兼容

---
 talent-card-server/scripts/run-server-tests.ps1 |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/talent-card-server/scripts/run-server-tests.ps1 b/talent-card-server/scripts/run-server-tests.ps1
index da0aacc..0a4f5e2 100644
--- a/talent-card-server/scripts/run-server-tests.ps1
+++ b/talent-card-server/scripts/run-server-tests.ps1
@@ -52,18 +52,35 @@
     }
 
     $goals = @('test')
-    if ($Clean) { $goals = @('clean') + $goals }
     $arguments = @('-o') + $goals
     if ($Test.Count -gt 0) { $arguments += ('-Dtest=' + ($Test -join ',')) }
     $arguments += '-DfailIfNoTests=false'
 
     $log = Join-Path $serverRoot 'target\server-tests.log'
-    Write-Host ("Running: .\mvnw.cmd {0}" -f ($arguments -join ' ')) -ForegroundColor Cyan
     Push-Location $serverRoot
+    # 原生命令往 stderr 写东西(例如 JVM 那句 sun.misc.Unsafe 警告)时,PowerShell 5.1 会把它当成
+    # 终止错误、在编译中途掐断构建(子进程也会被带走)。Maven 的退出码才是唯一判据,所以这一段
+    # 放宽 ErrorActionPreference,只在结束时看 $LASTEXITCODE。
+    $strict = $ErrorActionPreference
+    $ErrorActionPreference = 'Continue'
     try {
+        # clean 只能单独先跑:日志文件就在 target\ 下、且被下面那条 `*>` 重定向一直打开着,
+        # 把 clean 并进同一次 Maven 调用会以 "Failed to delete target\server-tests.log" 失败。
+        if ($Clean) {
+            Write-Host 'Running: .\mvnw.cmd -o clean' -ForegroundColor Cyan
+            & (Join-Path $serverRoot 'mvnw.cmd') -o clean *> $null
+            if ($LASTEXITCODE -ne 0) { throw "mvnw clean failed (exit $LASTEXITCODE)." }
+            # clean 把整个 target\ 删掉,重定向就没地方写日志了(而且会静默变成"假成功")。
+            New-Item -ItemType Directory -Force -Path (Split-Path $log) | Out-Null
+        }
+        # 先落一个空文件:万一这条重定向失败,$LASTEXITCODE 会留着上一次的值,下面据此判定"没跑成"。
+        Set-Content -Path $log -Value ''
+        Write-Host ("Running: .\mvnw.cmd {0}" -f ($arguments -join ' ')) -ForegroundColor Cyan
         & (Join-Path $serverRoot 'mvnw.cmd') @arguments *> $log
         $exitCode = $LASTEXITCODE
+        if ((Get-Item $log).Length -eq 0) { throw "Maven wrote nothing to $log; the run did not start." }
     } finally {
+        $ErrorActionPreference = $strict
         Pop-Location
     }
 

--
Gitblit v1.7.1