|
| 1 | +#Requires -Version 5.1 |
| 2 | +<# |
| 3 | +.SYNOPSIS |
| 4 | + Linkis 混合编译脚本 (PowerShell 版本) |
| 5 | +
|
| 6 | +.DESCRIPTION |
| 7 | + 解决方案: 先并行编译所有模块,再串行打包 linkis-dist |
| 8 | + 这样既能获得并行编译的性能提升,又能保证产物完整性 |
| 9 | + 预期效果: 性能提升 40-50%,产物与串行编译完全一致 |
| 10 | +
|
| 11 | +.PARAMETER Threads |
| 12 | + 并行编译线程数,默认为 "1C" (使用 CPU 核心数) |
| 13 | +
|
| 14 | +.PARAMETER SkipTests |
| 15 | + 是否跳过测试,默认为 $true |
| 16 | +
|
| 17 | +.EXAMPLE |
| 18 | + .\hybrid-build.ps1 |
| 19 | +
|
| 20 | +.EXAMPLE |
| 21 | + .\hybrid-build.ps1 -Threads 4 |
| 22 | +#> |
| 23 | + |
| 24 | +param( |
| 25 | + [string]$Threads = "1C", |
| 26 | + [switch]$SkipTests = $true |
| 27 | +) |
| 28 | + |
| 29 | +$ErrorActionPreference = "Stop" |
| 30 | +$OutputEncoding = [System.Text.Encoding]::UTF8 |
| 31 | + |
| 32 | +# 颜色定义 |
| 33 | +function Write-ColorOutput { |
| 34 | + param( |
| 35 | + [string]$Message, |
| 36 | + [string]$Color = "White" |
| 37 | + ) |
| 38 | + Write-Host $Message -ForegroundColor $Color |
| 39 | +} |
| 40 | + |
| 41 | +function Write-Banner { |
| 42 | + param([string]$Text) |
| 43 | + Write-Host "" |
| 44 | + Write-ColorOutput "╔════════════════════════════════════════════════════════╗" "Cyan" |
| 45 | + Write-ColorOutput "║$($Text.PadLeft(29 + $Text.Length/2).PadRight(58))║" "Cyan" |
| 46 | + Write-ColorOutput "╚════════════════════════════════════════════════════════╝" "Cyan" |
| 47 | + Write-Host "" |
| 48 | +} |
| 49 | + |
| 50 | +function Format-Duration { |
| 51 | + param([TimeSpan]$Duration) |
| 52 | + if ($Duration.TotalMinutes -ge 1) { |
| 53 | + return "{0}分{1}秒" -f [int]$Duration.TotalMinutes, $Duration.Seconds |
| 54 | + } |
| 55 | + return "{0}秒" -f [int]$Duration.TotalSeconds |
| 56 | +} |
| 57 | + |
| 58 | +# ============================================================ |
| 59 | +# 主程序开始 |
| 60 | +# ============================================================ |
| 61 | + |
| 62 | +Write-Banner "Linkis 混合编译模式 (Hybrid Build)" |
| 63 | + |
| 64 | +Write-ColorOutput "📋 编译策略:" "Yellow" |
| 65 | +Write-Host " [1/2] 并行编译所有模块 (跳过 linkis-dist) - 使用 -T $Threads" |
| 66 | +Write-Host " [2/2] 串行打包 linkis-dist - 确保产物完整" |
| 67 | +Write-Host "" |
| 68 | +Write-ColorOutput ("⏱️ 开始时间: " + (Get-Date -Format "yyyy-MM-dd HH:mm:ss")) "Yellow" |
| 69 | +Write-Host "" |
| 70 | + |
| 71 | +$TotalStartTime = Get-Date |
| 72 | +$SkipTestsArg = if ($SkipTests) { "-DskipTests" } else { "" } |
| 73 | + |
| 74 | +# ============================================================ |
| 75 | +# Step 1: 并行编译所有模块(跳过 linkis-dist) |
| 76 | +# ============================================================ |
| 77 | +Write-ColorOutput "[1/2] 🚀 并行编译所有模块..." "Green" |
| 78 | +$cmd = "mvn clean install -T $Threads $SkipTestsArg -pl `"!:linkis-dist`"" |
| 79 | +Write-Host "执行: $cmd" |
| 80 | +Write-Host "" |
| 81 | + |
| 82 | +$Step1Start = Get-Date |
| 83 | + |
| 84 | +try { |
| 85 | + & mvn clean install -T $Threads $SkipTestsArg -pl "!:linkis-dist" |
| 86 | + if ($LASTEXITCODE -ne 0) { |
| 87 | + throw "Maven 编译失败,退出码: $LASTEXITCODE" |
| 88 | + } |
| 89 | +} catch { |
| 90 | + Write-ColorOutput "❌ 步骤 1 编译失败: $_" "Red" |
| 91 | + exit 1 |
| 92 | +} |
| 93 | + |
| 94 | +$Step1End = Get-Date |
| 95 | +$Step1Duration = $Step1End - $Step1Start |
| 96 | + |
| 97 | +Write-Host "" |
| 98 | +Write-ColorOutput ("✅ 步骤 1 完成! 耗时: " + (Format-Duration $Step1Duration)) "Green" |
| 99 | +Write-Host "" |
| 100 | + |
| 101 | +# ============================================================ |
| 102 | +# Step 2: 串行编译 linkis-dist |
| 103 | +# ============================================================ |
| 104 | +Write-ColorOutput "[2/2] 📦 串行打包 linkis-dist..." "Green" |
| 105 | +$cmd = "mvn install -pl :linkis-dist $SkipTestsArg" |
| 106 | +Write-Host "执行: $cmd" |
| 107 | +Write-Host "" |
| 108 | + |
| 109 | +$Step2Start = Get-Date |
| 110 | + |
| 111 | +try { |
| 112 | + & mvn install -pl :linkis-dist $SkipTestsArg |
| 113 | + if ($LASTEXITCODE -ne 0) { |
| 114 | + throw "Maven 打包失败,退出码: $LASTEXITCODE" |
| 115 | + } |
| 116 | +} catch { |
| 117 | + Write-ColorOutput "❌ 步骤 2 编译失败: $_" "Red" |
| 118 | + exit 1 |
| 119 | +} |
| 120 | + |
| 121 | +$Step2End = Get-Date |
| 122 | +$Step2Duration = $Step2End - $Step2Start |
| 123 | + |
| 124 | +Write-Host "" |
| 125 | +Write-ColorOutput ("✅ 步骤 2 完成! 耗时: " + (Format-Duration $Step2Duration)) "Green" |
| 126 | +Write-Host "" |
| 127 | + |
| 128 | +# ============================================================ |
| 129 | +# 显示结果 |
| 130 | +# ============================================================ |
| 131 | +$TotalEndTime = Get-Date |
| 132 | +$TotalDuration = $TotalEndTime - $TotalStartTime |
| 133 | + |
| 134 | +Write-Banner "编译完成!" |
| 135 | + |
| 136 | +Write-ColorOutput "📊 耗时统计:" "Yellow" |
| 137 | +Write-Host (" 步骤 1 (并行编译模块): " + (Format-Duration $Step1Duration)) |
| 138 | +Write-Host (" 步骤 2 (串行打包): " + (Format-Duration $Step2Duration)) |
| 139 | +Write-Host " ────────────────────────────" |
| 140 | +Write-ColorOutput (" 总耗时: " + (Format-Duration $TotalDuration)) "Green" |
| 141 | +Write-Host "" |
| 142 | + |
| 143 | +# 检查产物 |
| 144 | +$DistDir = Join-Path $PSScriptRoot "linkis-dist\target\apache-linkis-1.8.0-bin" |
| 145 | +if (Test-Path $DistDir) { |
| 146 | + $Files = Get-ChildItem -Path $DistDir -Recurse -File |
| 147 | + $FileCount = $Files.Count |
| 148 | + $TotalSize = ($Files | Measure-Object -Property Length -Sum).Sum |
| 149 | + $SizeFormatted = if ($TotalSize -ge 1GB) { |
| 150 | + "{0:N2} GB" -f ($TotalSize / 1GB) |
| 151 | + } elseif ($TotalSize -ge 1MB) { |
| 152 | + "{0:N0} MB" -f ($TotalSize / 1MB) |
| 153 | + } else { |
| 154 | + "{0:N0} KB" -f ($TotalSize / 1KB) |
| 155 | + } |
| 156 | + |
| 157 | + Write-ColorOutput "📦 产物信息:" "Yellow" |
| 158 | + Write-Host " 目录: $DistDir" |
| 159 | + Write-Host " 文件数: $FileCount" |
| 160 | + Write-Host " 总大小: $SizeFormatted" |
| 161 | + Write-Host "" |
| 162 | + |
| 163 | + # 检查关键目录 |
| 164 | + Write-ColorOutput "🔍 关键模块检查:" "Yellow" |
| 165 | + $Modules = @( |
| 166 | + "linkis-cg-engineconnmanager", |
| 167 | + "linkis-cg-entrance", |
| 168 | + "linkis-cg-linkismanager" |
| 169 | + ) |
| 170 | + |
| 171 | + foreach ($Module in $Modules) { |
| 172 | + $ModulePath = Join-Path $DistDir "linkis-package\lib\linkis-computation-governance\$Module" |
| 173 | + if (Test-Path $ModulePath) { |
| 174 | + Write-ColorOutput " ✅ $Module" "Green" |
| 175 | + } else { |
| 176 | + Write-ColorOutput " ❌ $Module (缺失!)" "Red" |
| 177 | + } |
| 178 | + } |
| 179 | + Write-Host "" |
| 180 | +} |
| 181 | + |
| 182 | +Write-ColorOutput "🎉 混合编译完成!" "Green" |
| 183 | +Write-Host (" 结束时间: " + (Get-Date -Format "yyyy-MM-dd HH:mm:ss")) |
| 184 | +Write-Host "" |
0 commit comments