blob: b788756fd4c41668d689d656cad936f6a37d33cd [file] [log] [blame]
@echo off
chcp 65001 >nul 2>&1
setlocal EnableDelayedExpansion
REM ============================================================
REM Linkis 混合编译脚本 (Windows 版本)
REM
REM 解决方案: 先并行编译所有模块,再串行打包 linkis-dist
REM 这样既能获得并行编译的性能提升,又能保证产物完整性
REM
REM 预期效果: 性能提升 40-50%%,产物与串行编译完全一致
REM
REM 用法: quick-build.cmd [选项]
REM --v2 编译 2.x 版本 (Hadoop 2 + Spark 2 + Hive 2)
REM 默认编译 3.x 版本
REM ============================================================
set "THREADS=1C"
set "V2_MODE=false"
set "V2_PROFILE="
REM 解析命令行参数
:parse_args
if "%~1"=="" goto :done_args
if "%~1"=="--v2" (
set "V2_MODE=true"
set "V2_PROFILE=-Phadoop-2,spark-2,hive-2 -Dhadoop.profile=2"
shift
goto :parse_args
)
if "%~1"=="-t" (
set "THREADS=%~2"
shift
shift
goto :parse_args
)
shift
goto :parse_args
:done_args
echo.
echo ╔════════════════════════════════════════════════════════╗
echo Linkis 混合编译模式 (Hybrid Build)
echo ╚════════════════════════════════════════════════════════╝
echo.
echo 编译策略:
echo [1/2] 并行编译所有模块 (跳过 linkis-dist) - 使用 -T %THREADS%
echo [2/2] 串行打包 linkis-dist - 确保产物完整
echo.
if "%V2_MODE%"=="true" (
echo 版本: 2.x ^(Hadoop 2.7.2 + Spark 2.4.3 + Hive 2.3.3^)
) else (
echo 版本: 3.x ^(Hadoop 3.3.4 + Spark 3.2.1 + Hive 3.1.3^) [默认]
)
echo.
echo 开始时间: %date% %time%
echo.
REM 记录开始时间
set "START_TIME=%time%"
call :GetSeconds "%START_TIME%" START_SECONDS
REM ============================================================
REM Step 1: 并行编译所有模块(跳过 linkis-dist
REM ============================================================
echo [1/2] 并行编译所有模块...
echo 执行: mvn clean install -T %THREADS% -DskipTests %V2_PROFILE% -pl "!:linkis-dist"
echo.
set "STEP1_START=%time%"
call :GetSeconds "%STEP1_START%" STEP1_START_SEC
call mvn clean install -T %THREADS% -DskipTests %V2_PROFILE% -pl "!:linkis-dist"
if %ERRORLEVEL% neq 0 (
echo.
echo [错误] 步骤 1 编译失败!
exit /b 1
)
set "STEP1_END=%time%"
call :GetSeconds "%STEP1_END%" STEP1_END_SEC
set /a "STEP1_TIME=STEP1_END_SEC-STEP1_START_SEC"
if !STEP1_TIME! lss 0 set /a "STEP1_TIME+=86400"
set /a "STEP1_MIN=STEP1_TIME/60"
set /a "STEP1_SEC=STEP1_TIME%%60"
echo.
echo [OK] 步骤 1 完成! 耗时: !STEP1_TIME! (!STEP1_MIN!分!STEP1_SEC!秒)
echo.
REM ============================================================
REM Step 2: 串行编译 linkis-dist
REM ============================================================
echo [2/2] 串行打包 linkis-dist...
echo 执行: mvn install -pl :linkis-dist -DskipTests %V2_PROFILE%
echo.
set "STEP2_START=%time%"
call :GetSeconds "%STEP2_START%" STEP2_START_SEC
call mvn install -pl :linkis-dist -DskipTests %V2_PROFILE%
if %ERRORLEVEL% neq 0 (
echo.
echo [错误] 步骤 2 编译失败!
exit /b 1
)
set "STEP2_END=%time%"
call :GetSeconds "%STEP2_END%" STEP2_END_SEC
set /a "STEP2_TIME=STEP2_END_SEC-STEP2_START_SEC"
if !STEP2_TIME! lss 0 set /a "STEP2_TIME+=86400"
set /a "STEP2_MIN=STEP2_TIME/60"
set /a "STEP2_SEC=STEP2_TIME%%60"
echo.
echo [OK] 步骤 2 完成! 耗时: !STEP2_TIME! (!STEP2_MIN!分!STEP2_SEC!秒)
echo.
REM ============================================================
REM 计算总时间并显示结果
REM ============================================================
set "END_TIME=%time%"
call :GetSeconds "%END_TIME%" END_SECONDS
set /a "TOTAL_TIME=END_SECONDS-START_SECONDS"
if !TOTAL_TIME! lss 0 set /a "TOTAL_TIME+=86400"
set /a "TOTAL_MIN=TOTAL_TIME/60"
set /a "TOTAL_SEC=TOTAL_TIME%%60"
echo ╔════════════════════════════════════════════════════════╗
echo 编译完成!
echo ╚════════════════════════════════════════════════════════╝
echo.
echo 耗时统计:
echo 步骤 1 (并行编译模块): !STEP1_TIME! (!STEP1_MIN!分!STEP1_SEC!秒)
echo 步骤 2 (串行打包): !STEP2_TIME! (!STEP2_MIN!分!STEP2_SEC!秒)
echo ────────────────────────────
echo 总耗时: !TOTAL_TIME! (!TOTAL_MIN!分!TOTAL_SEC!秒)
echo.
REM 检查产物
set "DIST_DIR=linkis-dist\target\apache-linkis-1.8.0-bin"
if exist "%DIST_DIR%" (
echo 产物信息:
echo 目录: %DIST_DIR%
REM 统计文件数
set "FILE_COUNT=0"
for /r "%DIST_DIR%" %%f in (*) do set /a "FILE_COUNT+=1"
echo 文件数: !FILE_COUNT!
echo.
REM 检查关键目录
echo 关键模块检查:
if exist "%DIST_DIR%\linkis-package\lib\linkis-computation-governance\linkis-cg-engineconnmanager" (
echo [OK] linkis-cg-engineconnmanager
) else (
echo [X] linkis-cg-engineconnmanager (缺失!)
)
if exist "%DIST_DIR%\linkis-package\lib\linkis-computation-governance\linkis-cg-entrance" (
echo [OK] linkis-cg-entrance
) else (
echo [X] linkis-cg-entrance (缺失!)
)
if exist "%DIST_DIR%\linkis-package\lib\linkis-computation-governance\linkis-cg-linkismanager" (
echo [OK] linkis-cg-linkismanager
) else (
echo [X] linkis-cg-linkismanager (缺失!)
)
echo.
)
echo 混合编译完成!
echo 结束时间: %date% %time%
echo.
exit /b 0
REM ============================================================
REM 函数: 将时间转换为秒数
REM ============================================================
:GetSeconds
set "TIME_STR=%~1"
REM 处理时间格式 HH:MM:SS.CC H:MM:SS.CC
for /f "tokens=1-4 delims=:,." %%a in ("%TIME_STR%") do (
set /a "HOURS=%%a"
set /a "MINS=%%b"
set /a "SECS=%%c"
)
set /a "%~2=HOURS*3600+MINS*60+SECS"
exit /b