blob: 3a89dc26ea4c4fd0cfdbbcbbfdfc5c1ce914d18a [file] [log] [blame]
#Requires -Version 5.1
<#
.SYNOPSIS
Linkis 混合编译脚本 (PowerShell 版本)
.DESCRIPTION
解决方案: 先并行编译所有模块,再串行打包 linkis-dist
这样既能获得并行编译的性能提升,又能保证产物完整性
预期效果: 性能提升 40-50%,产物与串行编译完全一致
.PARAMETER Threads
并行编译线程数,默认为 "1C" (使用 CPU 核心数)
.PARAMETER SkipTests
是否跳过测试,默认为 $true
.PARAMETER V2
编译 2.x 版本 (Hadoop 2 + Spark 2 + Hive 2),默认编译 3.x 版本
.EXAMPLE
.\quick-build.ps1
使用默认设置编译 3.x 版本
.EXAMPLE
.\quick-build.ps1 -V2
编译 2.x 版本
.EXAMPLE
.\quick-build.ps1 -Threads 4
使用 4 线程编译
.EXAMPLE
.\quick-build.ps1 -V2 -Threads 4
编译 2.x 版本,使用 4 线程
#>
param(
[string]$Threads = "1C",
[switch]$SkipTests = $true,
[switch]$V2 = $false
)
$ErrorActionPreference = "Stop"
$OutputEncoding = [System.Text.Encoding]::UTF8
# 颜色定义
function Write-ColorOutput {
param(
[string]$Message,
[string]$Color = "White"
)
Write-Host $Message -ForegroundColor $Color
}
function Write-Banner {
param([string]$Text)
Write-Host ""
Write-ColorOutput "╔════════════════════════════════════════════════════════╗" "Cyan"
Write-ColorOutput "║$($Text.PadLeft(29 + $Text.Length/2).PadRight(58))║" "Cyan"
Write-ColorOutput "╚════════════════════════════════════════════════════════╝" "Cyan"
Write-Host ""
}
function Format-Duration {
param([TimeSpan]$Duration)
if ($Duration.TotalMinutes -ge 1) {
return "{0}分{1}秒" -f [int]$Duration.TotalMinutes, $Duration.Seconds
}
return "{0}秒" -f [int]$Duration.TotalSeconds
}
# ============================================================
# 主程序开始
# ============================================================
Write-Banner "Linkis 混合编译模式 (Hybrid Build)"
Write-ColorOutput "📋 编译策略:" "Yellow"
Write-Host " [1/2] 并行编译所有模块 (跳过 linkis-dist) - 使用 -T $Threads"
Write-Host " [2/2] 串行打包 linkis-dist - 确保产物完整"
Write-Host ""
if ($V2) {
Write-ColorOutput "🔧 版本: 2.x (Hadoop 2.7.2 + Spark 2.4.3 + Hive 2.3.3)" "Yellow"
} else {
Write-ColorOutput "🔧 版本: 3.x (Hadoop 3.3.4 + Spark 3.2.1 + Hive 3.1.3) [默认]" "Yellow"
}
Write-Host ""
Write-ColorOutput ("⏱️ 开始时间: " + (Get-Date -Format "yyyy-MM-dd HH:mm:ss")) "Yellow"
Write-Host ""
$TotalStartTime = Get-Date
$SkipTestsArg = if ($SkipTests) { "-DskipTests" } else { "" }
$V2ProfileArg = if ($V2) { "-Phadoop-2,spark-2,hive-2 -Dhadoop.profile=2" } else { "" }
# ============================================================
# Step 1: 并行编译所有模块(跳过 linkis-dist)
# ============================================================
Write-ColorOutput "[1/2] 🚀 并行编译所有模块..." "Green"
$cmd = "mvn clean install -T $Threads $SkipTestsArg $V2ProfileArg -pl `"!:linkis-dist`""
Write-Host "执行: $cmd"
Write-Host ""
$Step1Start = Get-Date
try {
$mvnArgs = @("clean", "install", "-T", $Threads)
if ($SkipTestsArg) { $mvnArgs += $SkipTestsArg }
if ($V2) {
$mvnArgs += "-Phadoop-2,spark-2,hive-2"
$mvnArgs += "-Dhadoop.profile=2"
}
$mvnArgs += @("-pl", "!:linkis-dist")
& mvn $mvnArgs
if ($LASTEXITCODE -ne 0) {
throw "Maven 编译失败,退出码: $LASTEXITCODE"
}
} catch {
Write-ColorOutput "❌ 步骤 1 编译失败: $_" "Red"
exit 1
}
$Step1End = Get-Date
$Step1Duration = $Step1End - $Step1Start
Write-Host ""
Write-ColorOutput ("✅ 步骤 1 完成! 耗时: " + (Format-Duration $Step1Duration)) "Green"
Write-Host ""
# ============================================================
# Step 2: 串行编译 linkis-dist
# ============================================================
Write-ColorOutput "[2/2] 📦 串行打包 linkis-dist..." "Green"
$cmd = "mvn install -pl :linkis-dist $SkipTestsArg $V2ProfileArg"
Write-Host "执行: $cmd"
Write-Host ""
$Step2Start = Get-Date
try {
$mvnArgs = @("install", "-pl", ":linkis-dist")
if ($SkipTestsArg) { $mvnArgs += $SkipTestsArg }
if ($V2) {
$mvnArgs += "-Phadoop-2,spark-2,hive-2"
$mvnArgs += "-Dhadoop.profile=2"
}
& mvn $mvnArgs
if ($LASTEXITCODE -ne 0) {
throw "Maven 打包失败,退出码: $LASTEXITCODE"
}
} catch {
Write-ColorOutput "❌ 步骤 2 编译失败: $_" "Red"
exit 1
}
$Step2End = Get-Date
$Step2Duration = $Step2End - $Step2Start
Write-Host ""
Write-ColorOutput ("✅ 步骤 2 完成! 耗时: " + (Format-Duration $Step2Duration)) "Green"
Write-Host ""
# ============================================================
# 显示结果
# ============================================================
$TotalEndTime = Get-Date
$TotalDuration = $TotalEndTime - $TotalStartTime
Write-Banner "编译完成!"
Write-ColorOutput "📊 耗时统计:" "Yellow"
Write-Host (" 步骤 1 (并行编译模块): " + (Format-Duration $Step1Duration))
Write-Host (" 步骤 2 (串行打包): " + (Format-Duration $Step2Duration))
Write-Host " ────────────────────────────"
Write-ColorOutput (" 总耗时: " + (Format-Duration $TotalDuration)) "Green"
Write-Host ""
# 检查产物
$DistDir = Join-Path $PSScriptRoot "linkis-dist\target\apache-linkis-1.8.0-bin"
if (Test-Path $DistDir) {
$Files = Get-ChildItem -Path $DistDir -Recurse -File
$FileCount = $Files.Count
$TotalSize = ($Files | Measure-Object -Property Length -Sum).Sum
$SizeFormatted = if ($TotalSize -ge 1GB) {
"{0:N2} GB" -f ($TotalSize / 1GB)
} elseif ($TotalSize -ge 1MB) {
"{0:N0} MB" -f ($TotalSize / 1MB)
} else {
"{0:N0} KB" -f ($TotalSize / 1KB)
}
Write-ColorOutput "📦 产物信息:" "Yellow"
Write-Host " 目录: $DistDir"
Write-Host " 文件数: $FileCount"
Write-Host " 总大小: $SizeFormatted"
Write-Host ""
# 检查关键目录
Write-ColorOutput "🔍 关键模块检查:" "Yellow"
$Modules = @(
"linkis-cg-engineconnmanager",
"linkis-cg-entrance",
"linkis-cg-linkismanager"
)
foreach ($Module in $Modules) {
$ModulePath = Join-Path $DistDir "linkis-package\lib\linkis-computation-governance\$Module"
if (Test-Path $ModulePath) {
Write-ColorOutput " ✅ $Module" "Green"
} else {
Write-ColorOutput " ❌ $Module (缺失!)" "Red"
}
}
Write-Host ""
}
Write-ColorOutput "🎉 混合编译完成!" "Green"
Write-Host (" 结束时间: " + (Get-Date -Format "yyyy-MM-dd HH:mm:ss"))
Write-Host ""