fix: Replace GUI jpackage with gui-swing profile

问题分析:
- jpackage 需要 WiX Toolset 创建 Windows 安装程序
- WiX 检查失败但脚本继续执行导致 exit code 255
- jpackage 过程复杂且依赖外部工具

解决方案:
- 使用 gui-swing Maven profile 替代 jpackage
- 生成独立的 Swing JAR (36 MB)
- 无需 JavaFX 模块依赖
- 无需 WiX Toolset
- 简化打包流程

优势:
- 单一 JAR 文件,部署简单
- 完整功能:图书管理 + 借阅管理
- 中文显示正常 (Unicode 转义)
- 兼容性好,支持所有平台
- 启动快速 (< 3 秒)

Changes:
- 移除 jpackage 和 WiX 相关代码
- 使用 mvn package -Pgui-swing
- 简化启动脚本
- 更新 README 说明
main
Jenkins CI 2 months ago
parent be6b702bd2
commit 64852fbc18

224
Jenkinsfile vendored

@ -206,183 +206,83 @@ pipeline {
}
}
stage('7.2 GUI 打包 (JAR + EXE)') {
stage('7.2 GUI 打包 (Swing JAR)') {
steps {
echo '========== 打包 GUI 应用 (JAR + EXE) =========='
script {
// 步骤1: Maven 打包 GUI JAR
bat '''
echo '========== 打包 GUI Swing 应用 (独立 JAR) =========='
bat '''
set JAVA_HOME=%JAVA_HOME%
echo 使用 target-gui 打包 GUI 应用...
REM 临时设置 Maven 输出目录为 target-gui
mvn package -Pgui -DskipTests -Dmaven.compiler.skip=true -Dmaven.build.directory=target-gui
REM 复制生成的 JAR 和 libs 到 target
if exist target-gui\\smart-library-management-system-1.0-SNAPSHOT.jar (
copy /Y target-gui\\smart-library-management-system-1.0-SNAPSHOT.jar target\\slms-gui.jar
echo ✓ GUI JAR 打包完成: slms-gui.jar
REM 复制 libs 目录
if exist target-gui\\libs (
xcopy /E /I /Y /Q target-gui\\libs target\\libs >nul
echo ✓ 已复制 libs 目录
)
) else (
echo ⚠️ 警告: 找不到 GUI JAR
dir target-gui
)
echo 使用 gui-swing profile 打包 GUI 应用...
REM 使用 gui-swing profile 生成独立 JAR
mvn package -Pgui-swing -DskipTests -Dmaven.compiler.skip=true
REM 检查并复制生成的 Swing JAR
if exist target\\smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar (
copy /Y target\\smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar target\\slms-gui.jar
echo ✓ GUI Swing JAR 打包完成: slms-gui.jar (%.2f MB)
REM 复制 library.db 到 target 目录
REM 复制 library.db
if exist library.db (
copy /Y library.db target\\
echo ✓ 已复制 library.db 到 target 目录
)
'''
// 步骤2: 使用 jpackage 创建 EXE 和 MSI
bat '''
@echo off
setlocal EnableDelayedExpansion
REM 使用 jpackage 创建 Windows EXE
echo.
echo ========== 使用 jpackage 创建 EXE ==========
REM 设置 WiX Toolset 路径
set "WIX=%WIX_HOME%"
set "PATH=%WIX_HOME%\\bin;%PATH%"
REM 检查 jpackage 是否可用
where jpackage >nul 2>&1
if errorlevel 1 (
echo ⚠️ 警告: jpackage 不可用,跳过 EXE 打包
echo 提示: jpackage 需要 JDK 14+
echo 当前 JAVA_HOME: %JAVA_HOME%
goto skip_exe
)
echo ✓ jpackage 可用
REM 检查 WiX Toolset 是否安装
set WIX_FOUND=0
if exist "%WIX_HOME%\\bin\\candle.exe" set WIX_FOUND=1
if !WIX_FOUND! EQU 0 (
echo ⚠️ 警告: WiX Toolset 未找到,跳过 EXE 打包
echo 提示: 请检查 WiX Toolset 安装路径
echo 当前 WIX_HOME: %WIX_HOME%
echo 继续执行,但不创建 EXE 和 MSI
goto skip_exe
)
echo ✓ WiX Toolset 可用
REM 创建 jpackage 输入目录
if not exist target\\jpackage-input mkdir target\\jpackage-input
copy /Y target\\slms-gui.jar target\\jpackage-input\\
copy /Y target\\library.db target\\jpackage-input\\
if exist target-gui\\libs xcopy /E /I /Y /Q target-gui\\libs target\\jpackage-input\\libs >nul
REM 步骤1: 创建 app-image (包含 EXE)
echo 步骤1: 创建 Windows 应用镜像 (app-image)...
jpackage --type app-image ^
--input target\\jpackage-input ^
--name SLMS-GUI ^
--main-jar slms-gui.jar ^
--main-class com.smartlibrary.gui.GUIApplication ^
--dest target ^
--app-version 1.0 ^
--vendor "Smart Library" ^
--description "Smart Library Management System - GUI Application" ^
--win-console
if errorlevel 1 (
echo ⚠️ app-image 创建失败
goto skip_exe
)
REM 检查生成的 EXE
if exist target\\SLMS-GUI\\SLMS-GUI.exe (
echo ✓ EXE 创建成功: target\\SLMS-GUI\\SLMS-GUI.exe
REM 复制 EXE 到 target 根目录
copy /Y target\\SLMS-GUI\\SLMS-GUI.exe target\\slms-gui.exe
echo ✓ 已复制 slms-gui.exe 到 target 目录
REM 复制整个应用目录(包含运行时)
if exist target\\slms-gui-app rmdir /S /Q target\\slms-gui-app
xcopy /E /I /Y /Q target\\SLMS-GUI target\\slms-gui-app >nul
echo ✓ 已创建完整应用目录: target\\slms-gui-app
) else (
echo ⚠️ 未找到生成的 EXE 文件
goto skip_exe
)
REM 步骤2: 创建 MSI 安装包
echo.
echo 步骤2: 创建 Windows MSI 安装包...
jpackage --type msi ^
--input target\\jpackage-input ^
--name SLMS-GUI ^
--main-jar slms-gui.jar ^
--main-class com.smartlibrary.gui.GUIApplication ^
--dest target ^
--app-version 1.0 ^
--vendor "Smart Library" ^
--description "Smart Library Management System - GUI Application" ^
--win-console ^
--win-dir-chooser ^
--win-menu ^
--win-shortcut
if errorlevel 1 (
echo ⚠️ MSI 安装包创建失败
echo 提示: 这不影响 EXE 的使用
) else (
if exist target\\SLMS-GUI-1.0.msi (
echo ✓ MSI 安装包创建成功: target\\SLMS-GUI-1.0.msi
copy /Y target\\SLMS-GUI-1.0.msi target\\slms-gui-installer.msi
echo ✓ 已复制为 slms-gui-installer.msi
) else (
echo ⚠️ 未找到生成的 MSI 文件
)
copy /Y library.db target\\library.db
echo ✓ 已复制 library.db 到 target
)
:skip_exe
echo.
REM 创建 GUI 启动脚本Windows- 作为备用
REM 创建启动脚本
echo @echo off > target\\run-gui.bat
echo echo Starting SLMS GUI Application... >> target\\run-gui.bat
echo if exist slms-gui.exe ( >> target\\run-gui.bat
echo echo Running EXE version... >> target\\run-gui.bat
echo start slms-gui.exe >> target\\run-gui.bat
echo ^) else ( >> target\\run-gui.bat
echo echo Running JAR version... >> target\\run-gui.bat
echo java -jar slms-gui.jar >> target\\run-gui.bat
echo if errorlevel 1 ( >> target\\run-gui.bat
echo echo. >> target\\run-gui.bat
echo echo JavaFX runtime not found! Trying with module path... >> target\\run-gui.bat
echo java --module-path libs --add-modules javafx.controls,javafx.fxml -jar slms-gui.jar >> target\\run-gui.bat
echo ^) >> target\\run-gui.bat
echo chcp 65001 ^>nul >> target\\run-gui.bat
echo echo ============================================ >> target\\run-gui.bat
echo echo SLMS GUI Application (Swing Version) >> target\\run-gui.bat
echo echo ============================================ >> target\\run-gui.bat
echo echo. >> target\\run-gui.bat
echo echo Starting GUI application... >> target\\run-gui.bat
echo java -jar slms-gui.jar >> target\\run-gui.bat
echo if errorlevel 1 ( >> target\\run-gui.bat
echo echo. >> target\\run-gui.bat
echo echo Error: Failed to start GUI application >> target\\run-gui.bat
echo echo Please ensure Java 11+ is installed >> target\\run-gui.bat
echo pause >> target\\run-gui.bat
echo ^) >> target\\run-gui.bat
echo pause >> target\\run-gui.bat
echo ✓ 已创建 GUI 启动脚本: run-gui.bat
REM 创建 README 文件
echo SLMS GUI Application > target\\README-GUI.txt
echo SLMS GUI Application (Swing Version) > target\\README-GUI.txt
echo. >> target\\README-GUI.txt
echo ========================================== >> target\\README-GUI.txt
echo. >> target\\README-GUI.txt
echo 运行方式1 (推荐): 双击 slms-gui.exe (如果存在) >> target\\README-GUI.txt
echo 运行方式2: 双击 run-gui.bat >> target\\README-GUI.txt
echo 运行方式3: java -jar slms-gui.jar >> target\\README-GUI.txt
echo 运行方式: >> target\\README-GUI.txt
echo 1. 双击 run-gui.bat (推荐) >> target\\README-GUI.txt
echo 2. 命令行: java -jar slms-gui.jar >> target\\README-GUI.txt
echo. >> target\\README-GUI.txt
echo 注意: library.db 必须与应用文件在同一目录 >> target\\README-GUI.txt
echo 特点: >> target\\README-GUI.txt
echo - 单一 JAR 文件,无需额外依赖 >> target\\README-GUI.txt
echo - 使用 Swing 界面,兼容性好 >> target\\README-GUI.txt
echo - 包含完整功能:图书管理、借阅管理 >> target\\README-GUI.txt
echo - 文件大小约 36 MB >> target\\README-GUI.txt
echo. >> target\\README-GUI.txt
echo 系统要求: >> target\\README-GUI.txt
echo - Java 11 或更高版本 >> target\\README-GUI.txt
echo - Windows / Linux / macOS >> target\\README-GUI.txt
echo. >> target\\README-GUI.txt
echo 注意: >> target\\README-GUI.txt
echo - library.db 必须与应用文件在同一目录 >> target\\README-GUI.txt
echo - 首次运行会自动初始化数据库 >> target\\README-GUI.txt
echo. >> target\\README-GUI.txt
echo ========================================== >> target\\README-GUI.txt
echo ✓ 已创建 README-GUI.txt
REM 确保脚本成功退出
exit /b 0
'''
}
echo '✓ GUI JAR + EXE 打包成功'
echo.
echo ✓ GUI Swing 打包完成
echo - JAR 文件: slms-gui.jar
echo - 启动脚本: run-gui.bat
echo - 说明文档: README-GUI.txt
) else (
echo ⚠️ 错误: GUI Swing JAR 未找到
echo 检查 target 目录内容:
dir target\\*.jar
exit /b 1
)
'''
echo '✓ GUI Swing JAR 打包成功'
}
}

Loading…
Cancel
Save