兼容性优化
This commit is contained in:
+96
-45
@@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
setlocal
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: ============================================
|
||||
:: WorkUtils 生产打包脚本(免安装版)
|
||||
@@ -8,7 +8,7 @@ setlocal
|
||||
:: (含 exe + 内嵌JRE + jar + 启动脚本)
|
||||
:: ============================================
|
||||
|
||||
::: 切换到项目根目录
|
||||
:: 切换到项目根目录
|
||||
cd /d "%~dp0.."
|
||||
set "PROJECT_DIR=%CD%"
|
||||
set "TARGET=%PROJECT_DIR%\target"
|
||||
@@ -20,26 +20,55 @@ echo ========== WorkUtils 生产构建 ==========
|
||||
echo 项目目录: %PROJECT_DIR%
|
||||
echo.
|
||||
|
||||
::: ============================================================
|
||||
::: 步骤 1:清理残留进程
|
||||
::: ============================================================
|
||||
echo [1/5] Clean stale processes...
|
||||
:: ============================================================
|
||||
:: 步骤 1:清理残留进程 & 解锁删除旧产物
|
||||
:: ============================================================
|
||||
echo [1/5] Clean stale processes and files...
|
||||
taskkill /f /im java.exe 2>nul
|
||||
taskkill /f /im workutils.exe 2>nul
|
||||
:: 等进程完全退出,文件锁释放
|
||||
echo 等待进程退出...
|
||||
ping 127.0.0.1 -n 4 >nul
|
||||
|
||||
::: ============================================================
|
||||
::: 步骤 2:Maven 打包
|
||||
::: ============================================================
|
||||
echo.
|
||||
echo [2/5] Maven build...
|
||||
:: --- 清理 target/dist ---
|
||||
if exist "%TARGET%" (
|
||||
echo Cleaning old target...
|
||||
:: 策略1:直接 rd(文件锁已释放时应成功)
|
||||
rd /s /q "%TARGET%" 2>nul
|
||||
:: 策略2:如果 rd 失败,改名后重建
|
||||
if exist "%TARGET%" (
|
||||
echo [WARN] Cannot delete target, retrying with Maven clean...
|
||||
call "%PROJECT_DIR%\mvnw.cmd" clean -q 2>nul
|
||||
echo [WARN] 直接删除失败,尝试改名清理...
|
||||
:: 先删 dist/ 子目录的文件(规避 JRE 文件锁)
|
||||
if exist "%DIST%" (
|
||||
del /f /s /q "%DIST%\*" 2>nul
|
||||
rd /s /q "%DIST%" 2>nul
|
||||
)
|
||||
:: 再删 jre/
|
||||
if exist "%TARGET%\jre" (
|
||||
del /f /s /q "%TARGET%\jre\*" 2>nul
|
||||
rd /s /q "%TARGET%\jre" 2>nul
|
||||
)
|
||||
:: 删 target/ 下其余文件
|
||||
del /f /s /q "%TARGET%\*" 2>nul
|
||||
for /d %%d in ("%TARGET%\*") do rd /s /q "%%d" 2>nul
|
||||
rd /s /q "%TARGET%" 2>nul
|
||||
)
|
||||
:: 策略3:改名旧目录,让后续步骤创建新的
|
||||
if exist "%TARGET%" (
|
||||
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set "TS=%%I"
|
||||
set "OLD_TARGET=%PROJECT_DIR%\target_old_!TS:~0,14!"
|
||||
echo [WARN] 无法删除,重命名为 !OLD_TARGET! ...
|
||||
move "%TARGET%" "!OLD_TARGET!" >nul 2>&1
|
||||
if exist "!OLD_TARGET!" (
|
||||
echo [INFO] 旧产物已移至 !OLD_TARGET!,稍后请手动删除
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
:: ============================================================
|
||||
:: 步骤 2:Maven 打包
|
||||
:: ============================================================
|
||||
echo.
|
||||
echo [2/5] Maven build...
|
||||
call "%PROJECT_DIR%\mvnw.cmd" package -DskipTests -q
|
||||
if %errorlevel% neq 0 (
|
||||
echo [ERROR] Maven build failed!
|
||||
@@ -47,22 +76,22 @@ if %errorlevel% neq 0 (
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
::: ============================================================
|
||||
::: 步骤 3:提取版本号(PowerShell 解析 pom.xml)
|
||||
::: ============================================================
|
||||
:: ============================================================
|
||||
:: 步骤 3:提取版本号
|
||||
:: ============================================================
|
||||
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)
|
||||
::: ============================================================
|
||||
:: ============================================================
|
||||
:: 步骤 4:生成精简 JRE(jlink 内嵌 Java 17 + JavaFX)
|
||||
:: ============================================================
|
||||
echo.
|
||||
echo [4/5] Generate bundled JRE...
|
||||
|
||||
::: 4.1 查找 JDK 17(环境变量 JDK17_HOME > 默认路径)
|
||||
:: 4.1 查找 JDK 17
|
||||
if not defined JDK17_HOME (
|
||||
for %%d in (
|
||||
"C:\Program Files\Java\jdk-17"
|
||||
@@ -81,7 +110,7 @@ if not defined JDK17_HOME (
|
||||
)
|
||||
:jdk17_found
|
||||
|
||||
::: 4.2 查找 JavaFX SDK(环境变量 JFX_SDK_HOME > 默认路径)
|
||||
:: 4.2 查找 JavaFX SDK
|
||||
if not defined JFX_SDK_HOME (
|
||||
for %%d in (
|
||||
"C:\Program Files\Java\javafx-sdk-17.0.15"
|
||||
@@ -102,10 +131,10 @@ if not defined JFX_SDK_HOME (
|
||||
echo JDK : %JDK17_HOME%
|
||||
echo JavaFX: %JFX_SDK_HOME%
|
||||
|
||||
::: 4.3 清理旧 JRE
|
||||
if exist "%TARGET%\jre" rd /s /q "%TARGET%\jre"
|
||||
:: 4.3 清理旧 JRE
|
||||
if exist "%TARGET%\jre" rd /s /q "%TARGET%\jre" 2>nul
|
||||
|
||||
::: 4.4 执行 jlink
|
||||
:: 4.4 执行 jlink
|
||||
echo Running jlink, please wait...
|
||||
"%JDK17_HOME%\bin\jlink.exe" ^
|
||||
--module-path "%JFX_SDK_HOME%\lib;%JDK17_HOME%\jmods" ^
|
||||
@@ -119,7 +148,7 @@ if %errorlevel% neq 0 (
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
::: 4.5 补充 JavaFX 原生 DLL(jlink 不会自动从 SDK bin/ 复制)
|
||||
:: 4.5 补充 JavaFX 原生 DLL
|
||||
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
|
||||
@@ -130,17 +159,21 @@ if exist "%JFX_SDK_HOME%\bin\glass.dll" (
|
||||
|
||||
echo [OK] JRE generated : %TARGET%\jre
|
||||
|
||||
::: ============================================================
|
||||
::: 步骤 5:组装发布目录 & 打包 ZIP
|
||||
::: ============================================================
|
||||
:: ============================================================
|
||||
:: 步骤 5:组装发布目录 & 打包 ZIP
|
||||
:: ============================================================
|
||||
echo.
|
||||
echo [5/5] Assemble distribution...
|
||||
|
||||
::: 清理旧发布目录
|
||||
if exist "%DIST%" rd /s /q "%DIST%"
|
||||
:: 清理旧发布目录
|
||||
if exist "%DIST%" (
|
||||
del /f /s /q "%DIST%\*" 2>nul
|
||||
for /d %%d in ("%DIST%\*") do rd /s /q "%%d" 2>nul
|
||||
rd /s /q "%DIST%" 2>nul
|
||||
)
|
||||
mkdir "%DIST%\workutils" 2>nul
|
||||
|
||||
::: 复制 EXE
|
||||
:: 复制 EXE
|
||||
if exist "%TARGET%\workutils.exe" (
|
||||
copy /y "%TARGET%\workutils.exe" "%DIST%\workutils\" >nul
|
||||
echo [OK] workutils.exe
|
||||
@@ -148,44 +181,61 @@ if exist "%TARGET%\workutils.exe" (
|
||||
echo [WARN] workutils.exe not found!
|
||||
)
|
||||
|
||||
::: 复制 JAR
|
||||
:: 复制 JAR
|
||||
for %%j in ("%TARGET%\workutils-*.jar") do (
|
||||
copy /y "%%j" "%DIST%\workutils\" >nul
|
||||
echo [OK] %%~nxj
|
||||
)
|
||||
|
||||
::: 复制内嵌 JRE
|
||||
:: 复制内嵌 JRE
|
||||
if exist "%TARGET%\jre\bin\java.exe" (
|
||||
echo 复制内嵌 JRE...
|
||||
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(备选启动方式)
|
||||
::: ============================================================
|
||||
:: ============================================================
|
||||
:: 生成 start.bat
|
||||
:: ============================================================
|
||||
(
|
||||
echo @echo off
|
||||
echo chcp 65001 ^>nul
|
||||
echo title WorkUtils
|
||||
echo java -jar "%%~dp0workutils-%VERSION%.jar" %%*
|
||||
echo pause
|
||||
echo.
|
||||
echo :: 优先用内嵌 JRE,否则查系统 Java 17+
|
||||
echo set "JAVA_BIN=%%~dp0jre\bin\java.exe"
|
||||
echo if exist "%%JAVA_BIN%%" goto :run
|
||||
echo.
|
||||
echo set "JAVA_BIN=java"
|
||||
echo for /f "tokens=3" %%%%v in ^('"%%JAVA_BIN%%" -version 2^>^&1 ^| findstr /i "version"'^) do set "JAVA_VER=%%%%~v"
|
||||
echo for /f "tokens=1 delims=." %%%%m in ^("%%JAVA_VER%%"^) do set "MAJOR=%%%%m"
|
||||
echo if "%%MAJOR%%"=="1" for /f "tokens=2 delims=." %%%%m in ^("%%JAVA_VER%%"^) do set "MAJOR=%%%%m"
|
||||
echo if %%MAJOR%% LSS 17 ^(
|
||||
echo echo [ERROR] Java %%JAVA_VER%% found. WorkUtils requires Java 17+.
|
||||
echo echo Download JDK 17+ from https://adoptium.net/
|
||||
echo pause ^& exit /b 1
|
||||
echo ^)
|
||||
echo.
|
||||
echo :run
|
||||
echo "%%JAVA_BIN%%" -jar "%%~dp0workutils-%VERSION%.jar" %%*
|
||||
echo if %%errorlevel%% neq 0 pause
|
||||
) > "%DIST%\workutils\start.bat"
|
||||
echo [OK] start.bat
|
||||
|
||||
::: ============================================================
|
||||
::: 打包 ZIP
|
||||
::: ============================================================
|
||||
:: ============================================================
|
||||
:: 打包 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%
|
||||
@@ -196,3 +246,4 @@ echo %DIST%\%ZIPNAME%.zip
|
||||
echo ============================================
|
||||
echo.
|
||||
pause
|
||||
exit /b 0
|
||||
|
||||
Reference in New Issue
Block a user