199 lines
6.2 KiB
Batchfile
199 lines
6.2 KiB
Batchfile
@echo off
|
||
chcp 65001 >nul
|
||
setlocal
|
||
|
||
:: ============================================
|
||
:: WorkUtils 生产打包脚本(免安装版)
|
||
:: 输出:target\dist\workutils-v{version}.zip
|
||
:: (含 exe + 内嵌JRE + jar + 启动脚本)
|
||
:: ============================================
|
||
|
||
::: 切换到项目根目录
|
||
cd /d "%~dp0.."
|
||
set "PROJECT_DIR=%CD%"
|
||
set "TARGET=%PROJECT_DIR%\target"
|
||
set "DIST=%TARGET%\dist"
|
||
set "VERSION="
|
||
|
||
echo.
|
||
echo ========== WorkUtils 生产构建 ==========
|
||
echo 项目目录: %PROJECT_DIR%
|
||
echo.
|
||
|
||
::: ============================================================
|
||
::: 步骤 1:清理残留进程
|
||
::: ============================================================
|
||
echo [1/5] Clean stale processes...
|
||
taskkill /f /im java.exe 2>nul
|
||
taskkill /f /im workutils.exe 2>nul
|
||
|
||
::: ============================================================
|
||
::: 步骤 2:Maven 打包
|
||
::: ============================================================
|
||
echo.
|
||
echo [2/5] Maven build...
|
||
if exist "%TARGET%" (
|
||
echo Cleaning old target...
|
||
rd /s /q "%TARGET%" 2>nul
|
||
if exist "%TARGET%" (
|
||
echo [WARN] Cannot delete target, retrying with Maven clean...
|
||
call "%PROJECT_DIR%\mvnw.cmd" clean -q 2>nul
|
||
)
|
||
)
|
||
call "%PROJECT_DIR%\mvnw.cmd" package -DskipTests -q
|
||
if %errorlevel% neq 0 (
|
||
echo [ERROR] Maven build failed!
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
::: ============================================================
|
||
::: 步骤 3:提取版本号(PowerShell 解析 pom.xml)
|
||
::: ============================================================
|
||
echo.
|
||
echo [3/5] Read version from pom.xml...
|
||
for /f "usebackq delims=" %%a in (`powershell -NoProfile -NonInteractive -Command "([xml](Get-Content -Encoding UTF8 '%PROJECT_DIR%\pom.xml')).project.version"`) do set "VERSION=%%a"
|
||
if "%VERSION%"=="" set "VERSION=0.0.1-SNAPSHOT"
|
||
echo 版本: %VERSION%
|
||
|
||
::: ============================================================
|
||
::: 步骤 4:生成精简 JRE(jlink 内嵌 Java 17 + JavaFX)
|
||
::: ============================================================
|
||
echo.
|
||
echo [4/5] Generate bundled JRE...
|
||
|
||
::: 4.1 查找 JDK 17(环境变量 JDK17_HOME > 默认路径)
|
||
if not defined JDK17_HOME (
|
||
for %%d in (
|
||
"C:\Program Files\Java\jdk-17"
|
||
"C:\Program Files\Eclipse Adoptium\jdk-17.0.0.35-hotspot"
|
||
"C:\Program Files\Java\jdk-17.0.14"
|
||
"%JAVA_HOME%"
|
||
) do (
|
||
if exist "%%~d\bin\jlink.exe" (
|
||
set "JDK17_HOME=%%~d"
|
||
goto :jdk17_found
|
||
)
|
||
)
|
||
echo [ERROR] Cannot find JDK 17 with jlink.exe
|
||
echo Please set JDK17_HOME environment variable
|
||
pause & exit /b 1
|
||
)
|
||
:jdk17_found
|
||
|
||
::: 4.2 查找 JavaFX SDK(环境变量 JFX_SDK_HOME > 默认路径)
|
||
if not defined JFX_SDK_HOME (
|
||
for %%d in (
|
||
"C:\Program Files\Java\javafx-sdk-17.0.15"
|
||
"C:\Program Files\Java\javafx-sdk-17.0.14"
|
||
"C:\Program Files\Java\javafx-sdk-17"
|
||
) do (
|
||
if exist "%%~d\lib\javafx.base.jar" (
|
||
set "JFX_SDK_HOME=%%~d"
|
||
goto :jfx_found
|
||
)
|
||
)
|
||
echo [ERROR] Cannot find JavaFX SDK
|
||
echo Please set JFX_SDK_HOME environment variable
|
||
pause & exit /b 1
|
||
)
|
||
:jfx_found
|
||
|
||
echo JDK : %JDK17_HOME%
|
||
echo JavaFX: %JFX_SDK_HOME%
|
||
|
||
::: 4.3 清理旧 JRE
|
||
if exist "%TARGET%\jre" rd /s /q "%TARGET%\jre"
|
||
|
||
::: 4.4 执行 jlink
|
||
echo Running jlink, please wait...
|
||
"%JDK17_HOME%\bin\jlink.exe" ^
|
||
--module-path "%JFX_SDK_HOME%\lib;%JDK17_HOME%\jmods" ^
|
||
--add-modules java.base,java.desktop,java.logging,java.management,java.naming,java.sql,java.xml,java.xml.crypto,java.instrument,java.security.jgss,java.security.sasl,jdk.unsupported,jdk.management,java.scripting,jdk.crypto.ec,java.net.http,javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.web,javafx.swing ^
|
||
--output "%TARGET%\jre" ^
|
||
--strip-debug --no-header-files --no-man-pages --compress=2
|
||
|
||
if %errorlevel% neq 0 (
|
||
echo [ERROR] jlink failed!
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
::: 4.5 补充 JavaFX 原生 DLL(jlink 不会自动从 SDK bin/ 复制)
|
||
echo Copy JavaFX native DLLs...
|
||
if exist "%JFX_SDK_HOME%\bin\glass.dll" (
|
||
xcopy /y /q "%JFX_SDK_HOME%\bin\*.dll" "%TARGET%\jre\bin\" >nul
|
||
echo [OK] JavaFX DLLs copied
|
||
) else (
|
||
echo [WARN] No JavaFX DLLs found in %JFX_SDK_HOME%\bin
|
||
)
|
||
|
||
echo [OK] JRE generated : %TARGET%\jre
|
||
|
||
::: ============================================================
|
||
::: 步骤 5:组装发布目录 & 打包 ZIP
|
||
::: ============================================================
|
||
echo.
|
||
echo [5/5] Assemble distribution...
|
||
|
||
::: 清理旧发布目录
|
||
if exist "%DIST%" rd /s /q "%DIST%"
|
||
mkdir "%DIST%\workutils" 2>nul
|
||
|
||
::: 复制 EXE
|
||
if exist "%TARGET%\workutils.exe" (
|
||
copy /y "%TARGET%\workutils.exe" "%DIST%\workutils\" >nul
|
||
echo [OK] workutils.exe
|
||
) else (
|
||
echo [WARN] workutils.exe not found!
|
||
)
|
||
|
||
::: 复制 JAR
|
||
for %%j in ("%TARGET%\workutils-*.jar") do (
|
||
copy /y "%%j" "%DIST%\workutils\" >nul
|
||
echo [OK] %%~nxj
|
||
)
|
||
|
||
::: 复制内嵌 JRE
|
||
if exist "%TARGET%\jre\bin\java.exe" (
|
||
xcopy /e /i /q "%TARGET%\jre" "%DIST%\workutils\jre\" >nul
|
||
echo [OK] jre/ ^(bundled Java 17 + JavaFX^)
|
||
) else (
|
||
echo [WARN] jre not found in target!
|
||
)
|
||
|
||
::: ============================================================
|
||
::: 生成 start.bat(备选启动方式)
|
||
::: ============================================================
|
||
(
|
||
echo @echo off
|
||
echo chcp 65001 ^>nul
|
||
echo title WorkUtils
|
||
echo java -jar "%%~dp0workutils-%VERSION%.jar" %%*
|
||
echo pause
|
||
) > "%DIST%\workutils\start.bat"
|
||
echo [OK] start.bat
|
||
|
||
::: ============================================================
|
||
::: 打包 ZIP
|
||
::: ============================================================
|
||
set "ZIPNAME=workutils-v%VERSION%"
|
||
echo 正在压缩 %ZIPNAME%.zip ...
|
||
powershell -Command ^
|
||
"Compress-Archive -Path '%DIST%\workutils' -DestinationPath '%DIST%\%ZIPNAME%.zip' -Force"
|
||
echo [OK] %ZIPNAME%.zip
|
||
|
||
::: ============================================================
|
||
::: 完成
|
||
::: ============================================================
|
||
echo.
|
||
echo ============================================
|
||
echo Build Complete ^! v%VERSION%
|
||
echo ============================================
|
||
echo Output:
|
||
echo %DIST%\workutils\
|
||
echo %DIST%\%ZIPNAME%.zip
|
||
echo ============================================
|
||
echo.
|
||
pause
|