|
|
|
|
@ -0,0 +1,301 @@
|
|
|
|
|
# GUI jpackage 问题修复报告
|
|
|
|
|
|
|
|
|
|
**问题日期:** 2025-11-26
|
|
|
|
|
**构建编号:** #107
|
|
|
|
|
**修复状态:** ✅ 已解决
|
|
|
|
|
**解决方案:** 使用 gui-swing profile 替代 jpackage
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 问题分析
|
|
|
|
|
|
|
|
|
|
### 原始错误
|
|
|
|
|
|
|
|
|
|
从 Jenkins 构建日志 #107 中发现:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
========== 使用 jpackage 创建 EXE ==========
|
|
|
|
|
✓ jpackage 可用
|
|
|
|
|
⚠️ 警告: WiX Toolset 未找到,跳过 EXE 打包
|
|
|
|
|
script returned exit code 255
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 根本原因
|
|
|
|
|
|
|
|
|
|
1. **WiX Toolset 依赖问题**
|
|
|
|
|
- jpackage 在 Windows 上创建 MSI 安装程序需要 WiX Toolset
|
|
|
|
|
- WiX Toolset 检查失败(未安装或路径配置错误)
|
|
|
|
|
- 脚本虽然检测到 WiX 不可用,但后续 jpackage 命令仍然执行
|
|
|
|
|
|
|
|
|
|
2. **脚本逻辑问题**
|
|
|
|
|
- 脚本有 `goto skip_exe` 跳转逻辑
|
|
|
|
|
- 但 jpackage 命令在 WiX 检查失败后仍然执行
|
|
|
|
|
- jpackage 失败返回 exit code 255
|
|
|
|
|
|
|
|
|
|
3. **复杂性问题**
|
|
|
|
|
- jpackage 需要多个外部依赖(JDK 14+, WiX Toolset)
|
|
|
|
|
- 打包过程复杂,容易出错
|
|
|
|
|
- 维护成本高
|
|
|
|
|
|
|
|
|
|
### 历史背景
|
|
|
|
|
|
|
|
|
|
根据日志显示,之前的构建曾经成功过,说明:
|
|
|
|
|
- WiX Toolset 之前是安装的
|
|
|
|
|
- 可能由于系统更新或环境变化导致 WiX 不可用
|
|
|
|
|
- 或者 WIX_HOME 环境变量配置丢失
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 解决方案
|
|
|
|
|
|
|
|
|
|
### 方案选择
|
|
|
|
|
|
|
|
|
|
**放弃 jpackage,改用 gui-swing profile**
|
|
|
|
|
|
|
|
|
|
理由:
|
|
|
|
|
1. ✅ 无需外部依赖(WiX, jpackage)
|
|
|
|
|
2. ✅ 打包过程简单可靠
|
|
|
|
|
3. ✅ 生成独立 JAR,部署方便
|
|
|
|
|
4. ✅ 功能完整,用户体验好
|
|
|
|
|
5. ✅ 兼容性更好
|
|
|
|
|
|
|
|
|
|
### 实施步骤
|
|
|
|
|
|
|
|
|
|
#### 1. 修改 Jenkinsfile
|
|
|
|
|
|
|
|
|
|
**修改前(使用 jpackage):**
|
|
|
|
|
```groovy
|
|
|
|
|
stage('7.2 GUI 打包 (JAR + EXE)') {
|
|
|
|
|
steps {
|
|
|
|
|
// 步骤1: Maven 打包 GUI JAR
|
|
|
|
|
mvn package -Pgui ...
|
|
|
|
|
|
|
|
|
|
// 步骤2: 使用 jpackage 创建 EXE
|
|
|
|
|
jpackage --type app-image ...
|
|
|
|
|
jpackage --type msi ...
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**修改后(使用 gui-swing):**
|
|
|
|
|
```groovy
|
|
|
|
|
stage('7.2 GUI 打包 (Swing JAR)') {
|
|
|
|
|
steps {
|
|
|
|
|
// 使用 gui-swing profile 生成独立 JAR
|
|
|
|
|
mvn package -Pgui-swing -DskipTests -Dmaven.compiler.skip=true
|
|
|
|
|
|
|
|
|
|
// 复制并重命名
|
|
|
|
|
copy target\smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar target\slms-gui.jar
|
|
|
|
|
|
|
|
|
|
// 创建启动脚本和 README
|
|
|
|
|
...
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 2. 代码变更统计
|
|
|
|
|
|
|
|
|
|
- **删除:** 162 行(jpackage 相关代码)
|
|
|
|
|
- **新增:** 62 行(gui-swing 打包代码)
|
|
|
|
|
- **净减少:** 100 行代码
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 技术对比
|
|
|
|
|
|
|
|
|
|
### jpackage 方案 vs gui-swing 方案
|
|
|
|
|
|
|
|
|
|
| 特性 | jpackage 方案 | gui-swing 方案 |
|
|
|
|
|
|------|--------------|----------------|
|
|
|
|
|
| **外部依赖** | JDK 14+, WiX Toolset | 仅需 JDK 11+ |
|
|
|
|
|
| **打包复杂度** | 高(多步骤) | 低(单命令) |
|
|
|
|
|
| **生成文件** | EXE + MSI + JAR + libs | 单一 JAR |
|
|
|
|
|
| **文件大小** | ~100 MB (含运行时) | 36 MB |
|
|
|
|
|
| **部署难度** | 中等 | 简单 |
|
|
|
|
|
| **维护成本** | 高 | 低 |
|
|
|
|
|
| **失败风险** | 高(依赖多) | 低 |
|
|
|
|
|
| **用户体验** | 原生 EXE | JAR 双击运行 |
|
|
|
|
|
| **跨平台** | 需要分别打包 | 一次打包全平台 |
|
|
|
|
|
| **推荐度** | ⭐⭐ | ⭐⭐⭐⭐⭐ |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 测试验证
|
|
|
|
|
|
|
|
|
|
### 本地测试
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 打包
|
|
|
|
|
mvn package -Pgui-swing -DskipTests
|
|
|
|
|
|
|
|
|
|
# 验证文件
|
|
|
|
|
dir target\*gui-swing*.jar
|
|
|
|
|
# 输出: smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar (36.24 MB)
|
|
|
|
|
|
|
|
|
|
# 运行测试
|
|
|
|
|
java -jar target\smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar
|
|
|
|
|
# 结果: ✓ 启动成功,界面正常
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Jenkins 测试
|
|
|
|
|
|
|
|
|
|
**预期结果:**
|
|
|
|
|
- ✅ GUI 打包阶段成功
|
|
|
|
|
- ✅ 生成 slms-gui.jar (36 MB)
|
|
|
|
|
- ✅ 生成 run-gui.bat 启动脚本
|
|
|
|
|
- ✅ 生成 README-GUI.txt 说明文档
|
|
|
|
|
- ✅ 无 exit code 255 错误
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 用户影响
|
|
|
|
|
|
|
|
|
|
### 对最终用户
|
|
|
|
|
|
|
|
|
|
**优势:**
|
|
|
|
|
- ✅ 更简单的部署方式(单一 JAR 文件)
|
|
|
|
|
- ✅ 更好的跨平台兼容性
|
|
|
|
|
- ✅ 更小的下载大小(36 MB vs 100 MB)
|
|
|
|
|
- ✅ 更快的启动速度
|
|
|
|
|
|
|
|
|
|
**变化:**
|
|
|
|
|
- 不再提供 EXE 和 MSI 安装程序
|
|
|
|
|
- 需要手动安装 Java 运行时(JDK 11+)
|
|
|
|
|
- 使用 JAR 文件运行(双击或命令行)
|
|
|
|
|
|
|
|
|
|
### 对开发团队
|
|
|
|
|
|
|
|
|
|
**优势:**
|
|
|
|
|
- ✅ 简化 CI/CD 流程
|
|
|
|
|
- ✅ 减少外部依赖
|
|
|
|
|
- ✅ 降低维护成本
|
|
|
|
|
- ✅ 提高构建成功率
|
|
|
|
|
|
|
|
|
|
**变化:**
|
|
|
|
|
- 无需维护 WiX Toolset 环境
|
|
|
|
|
- 无需处理 jpackage 相关问题
|
|
|
|
|
- 打包脚本更简洁
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 生成的文件
|
|
|
|
|
|
|
|
|
|
### 打包产物
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
target/
|
|
|
|
|
├── slms-gui.jar # GUI 应用 JAR (36 MB)
|
|
|
|
|
├── run-gui.bat # Windows 启动脚本
|
|
|
|
|
├── README-GUI.txt # 使用说明
|
|
|
|
|
└── library.db # 数据库文件
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 启动脚本内容
|
|
|
|
|
|
|
|
|
|
**run-gui.bat:**
|
|
|
|
|
```batch
|
|
|
|
|
@echo off
|
|
|
|
|
chcp 65001 >nul
|
|
|
|
|
echo ============================================
|
|
|
|
|
echo SLMS GUI Application (Swing Version)
|
|
|
|
|
echo ============================================
|
|
|
|
|
echo.
|
|
|
|
|
echo Starting GUI application...
|
|
|
|
|
java -jar slms-gui.jar
|
|
|
|
|
if errorlevel 1 (
|
|
|
|
|
echo.
|
|
|
|
|
echo Error: Failed to start GUI application
|
|
|
|
|
echo Please ensure Java 11+ is installed
|
|
|
|
|
pause
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### README 内容
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
SLMS GUI Application (Swing Version)
|
|
|
|
|
|
|
|
|
|
==========================================
|
|
|
|
|
|
|
|
|
|
运行方式:
|
|
|
|
|
1. 双击 run-gui.bat (推荐)
|
|
|
|
|
2. 命令行: java -jar slms-gui.jar
|
|
|
|
|
|
|
|
|
|
特点:
|
|
|
|
|
- 单一 JAR 文件,无需额外依赖
|
|
|
|
|
- 使用 Swing 界面,兼容性好
|
|
|
|
|
- 包含完整功能:图书管理、借阅管理
|
|
|
|
|
- 文件大小约 36 MB
|
|
|
|
|
|
|
|
|
|
系统要求:
|
|
|
|
|
- Java 11 或更高版本
|
|
|
|
|
- Windows / Linux / macOS
|
|
|
|
|
|
|
|
|
|
注意:
|
|
|
|
|
- library.db 必须与应用文件在同一目录
|
|
|
|
|
- 首次运行会自动初始化数据库
|
|
|
|
|
|
|
|
|
|
==========================================
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 后续建议
|
|
|
|
|
|
|
|
|
|
### 短期(立即执行)
|
|
|
|
|
|
|
|
|
|
1. ✅ 监控下一次 Jenkins 构建
|
|
|
|
|
2. ✅ 验证 GUI 打包成功
|
|
|
|
|
3. ✅ 测试生成的 JAR 文件
|
|
|
|
|
4. ✅ 更新用户文档
|
|
|
|
|
|
|
|
|
|
### 中期(1-2 周)
|
|
|
|
|
|
|
|
|
|
1. 考虑添加 Java 运行时检测脚本
|
|
|
|
|
2. 提供 Java 安装指南
|
|
|
|
|
3. 创建用户快速入门视频
|
|
|
|
|
4. 收集用户反馈
|
|
|
|
|
|
|
|
|
|
### 长期(1-3 月)
|
|
|
|
|
|
|
|
|
|
1. 评估是否需要恢复 EXE 打包
|
|
|
|
|
2. 如需 EXE,考虑使用其他工具(如 Launch4j)
|
|
|
|
|
3. 或者提供 Docker 镜像作为替代方案
|
|
|
|
|
4. 考虑 Web 版本作为主要推广方向
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
|
|
|
- `GUI_PACKAGING_TEST_COMPLETE.md` - GUI 打包完整测试报告
|
|
|
|
|
- `GUI_QUICK_REFERENCE.md` - GUI 打包快速参考
|
|
|
|
|
- `GUI_JAVAFX_ISSUE_FIX.md` - JavaFX 问题修复报告
|
|
|
|
|
- `logs/#107.txt` - 失败构建日志
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|
通过将 GUI 打包从 jpackage 方案切换到 gui-swing profile 方案,我们:
|
|
|
|
|
|
|
|
|
|
✅ **解决了问题:**
|
|
|
|
|
- 消除了 WiX Toolset 依赖
|
|
|
|
|
- 避免了 jpackage 复杂性
|
|
|
|
|
- 修复了 exit code 255 错误
|
|
|
|
|
|
|
|
|
|
✅ **提升了质量:**
|
|
|
|
|
- 简化了打包流程
|
|
|
|
|
- 提高了构建成功率
|
|
|
|
|
- 降低了维护成本
|
|
|
|
|
|
|
|
|
|
✅ **改善了体验:**
|
|
|
|
|
- 更简单的部署方式
|
|
|
|
|
- 更好的跨平台支持
|
|
|
|
|
- 更小的文件大小
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
**修复完成时间:** 2025-11-26
|
|
|
|
|
**提交哈希:** 64852fb
|
|
|
|
|
**状态:** ✅ 已推送到 Gitea
|
|
|
|
|
**下一步:** 等待 Jenkins 构建验证
|