| | |
| | | } |
| | | |
| | | $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 |
| | | } |
| | | |