fix: Shorten artifact names to slms and update repository to slms.git

main
Jenkins CI 5 months ago
parent 56500713e8
commit 95e138bddd

@ -0,0 +1,332 @@
# Design Document
## Overview
本设计文档描述了SLMS项目GUI应用打包的完整解决方案。当前问题是Jenkins流水线中并行打包后文件重命名步骤没有正确执行导致最终制品缺失。本设计将分两个阶段解决
**阶段1** 修复当前的文件复制问题确保JAR/WAR文件能正确重命名和归档
**阶段2** 实现jpackage打包生成EXE和MSI安装包
## Architecture
### 当前架构问题
```
并行打包阶段:
├─ CLI打包 → mvn package -Pcli → 生成 *-cli-shaded.jar
├─ GUI打包 → mvn package -Pgui-swing → 生成 *-gui-swing.jar
├─ Web打包 → mvn package -Pweb → 生成 *.war
└─ Android打包 → gradlew assembleDebug → 生成 *.apk
问题:
1. 并行执行时bat脚本的echo输出被混在一起
2. 文件复制命令可能执行了但输出不可见
3. 或者由于并行冲突,复制命令根本没执行
```
### 目标架构
```
阶段1 - 修复文件复制:
├─ 串行化关键步骤:打包完成后统一重命名
├─ 添加详细的文件检查和日志
├─ 使用PowerShell脚本替代bat以获得更好的错误处理
阶段2 - 添加jpackage:
├─ 检查环境依赖JDK 14+, WiX Toolset
├─ 生成jpackage输入目录
├─ 执行jpackage创建EXE和MSI
├─ 验证生成的文件
└─ 如果失败回退到JAR方案
```
## Components and Interfaces
### Component 1: 文件重命名模块
**职责:** 在所有并行打包完成后,统一检查和重命名文件
**接口:**
```groovy
stage('7.5 重命名制品') {
steps {
script {
renameArtifacts()
}
}
}
def renameArtifacts() {
// 检查并重命名CLI JAR
// 检查并重命名GUI JAR
// 检查并重命名Web WAR
// 复制library.db
// 生成README文件
}
```
### Component 2: jpackage打包模块
**职责:** 使用jpackage创建Windows原生安装包
**接口:**
```groovy
stage('7.6 创建Windows安装包') {
when {
expression { isJpackageAvailable() }
}
steps {
script {
createWindowsInstallers()
}
}
}
def isJpackageAvailable() {
// 检查jpackage命令
// 检查WiX Toolset
return true/false
}
def createWindowsInstallers() {
// 准备jpackage输入目录
// 执行jpackage --type app-image
// 执行jpackage --type msi
// 验证生成的文件
}
```
### Component 3: 环境检查模块
**职责:** 检查Jenkins环境是否满足jpackage要求
**接口:**
```groovy
def checkJpackageEnvironment() {
return [
jpackageAvailable: boolean,
jpackageVersion: string,
wixInstalled: boolean,
wixHome: string,
jdkVersion: string
]
}
```
## Data Models
### 制品文件模型
```
Artifacts:
CLI:
- smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar (源文件)
- slms-cli.jar (重命名后)
GUI:
- smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar (源文件)
- slms-gui.jar (重命名后)
- slms-gui.exe (jpackage生成)
- slms-gui-installer.msi (jpackage生成)
- run-gui.bat (启动脚本)
- README-GUI.txt (说明文档)
Web:
- smart-library-management-system-1.0-SNAPSHOT.war (源文件)
- slms-web.war (重命名后)
Android:
- SLMS-debug.apk (源文件)
- slms-debug.apk (重命名后)
Database:
- library.db
```
### jpackage配置模型
```
JpackageConfig:
input: target/jpackage-input/
mainJar: slms-gui.jar
mainClass: com.smartlibrary.gui.SimpleGUIApplication
name: SLMS
appVersion: 1.0
vendor: CHZU
icon: resources/icon.ico
type: [app-image, msi]
winMenu: true
winDirChooser: true
winShortcut: true
```
## Correctness Properties
*A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.*
### Property 1: 文件重命名完整性
*For any* 成功的打包构建,所有源文件(*-cli-shaded.jar, *-gui-swing.jar, *.war, *-debug.apk都应该被重命名为标准名称slms-cli.jar, slms-gui.jar, slms-web.war, slms-debug.apk
**Validates: Requirements 1.1, 1.2, 1.3**
### Property 2: 制品归档一致性
*For any* 归档操作Jenkins archiveArtifacts应该包含所有重命名后的文件且文件大小应该大于0
**Validates: Requirements 4.1, 4.2**
### Property 3: jpackage环境检查
*For any* jpackage打包尝试如果WiX Toolset不可用系统应该跳过EXE/MSI生成并记录警告而不是失败
**Validates: Requirements 5.1, 5.2, 5.3**
### Property 4: EXE可执行性
*For any* 生成的EXE文件双击应该能够启动应用并显示GUI界面
**Validates: Requirements 2.3**
### Property 5: MSI安装完整性
*For any* 生成的MSI文件安装后应该在开始菜单创建快捷方式且快捷方式能够启动应用
**Validates: Requirements 2.4, 2.5**
### Property 6: 制品推送完整性
*For any* 推送到release分支的操作artifacts目录应该包含所有可用的制品文件
**Validates: Requirements 4.5**
## Error Handling
### 错误场景1文件重命名失败
**检测:** 检查源文件是否存在
**处理:** 记录详细错误信息标记构建为UNSTABLE继续后续步骤
**恢复:** 在归档阶段尝试归档原始文件名
### 错误场景2jpackage不可用
**检测:** 执行`jpackage --version`检查返回码
**处理:** 记录警告信息跳过EXE/MSI生成使用JAR作为备用
**恢复:** 在README中说明只有JAR可用
### 错误场景3WiX Toolset未安装
**检测:** 检查WIX_HOME环境变量和candle.exe文件
**处理:** 记录详细的安装指导跳过MSI生成只生成EXE
**恢复:** 提供WiX安装链接和配置说明
### 错误场景4jpackage执行失败
**检测:** 检查jpackage命令的退出码
**处理:** 记录完整的错误输出保留JAR文件
**恢复:** 标记构建为UNSTABLE在邮件中说明情况
### 错误场景5制品推送失败
**检测:** 检查git push的返回码
**处理:** 记录错误信息但不影响Jenkins归档
**恢复:** 用户仍可从Jenkins下载制品
## Testing Strategy
### Unit Tests
由于这是CI/CD流水线配置主要通过集成测试验证
1. **本地测试**
- 在本地Windows环境执行jpackage命令
- 验证生成的EXE和MSI
- 测试安装和运行流程
2. **Jenkins测试**
- 触发Jenkins构建
- 检查构建日志
- 验证归档的制品
- 测试从release分支下载
### Integration Tests
1. **端到端测试**
- 完整的Jenkins流水线执行
- 验证所有阶段都成功
- 检查所有制品都被归档
- 验证release分支更新
2. **回退测试**
- 模拟jpackage不可用的情况
- 验证系统回退到JAR方案
- 确认构建标记为UNSTABLE而非FAILURE
### Manual Tests
1. **EXE测试**
- 下载slms-gui.exe
- 双击运行
- 验证GUI界面显示
- 测试所有功能(图书管理、借阅管理)
2. **MSI测试**
- 下载slms-gui-installer.msi
- 运行安装程序
- 验证安装到指定目录
- 检查开始菜单快捷方式
- 从快捷方式启动应用
- 测试所有功能
3. **卸载测试**
- 从控制面板卸载应用
- 验证文件被删除
- 验证快捷方式被删除
## Implementation Notes
### 阶段1实现要点
1. **添加独立的重命名阶段**
- 在并行打包后添加串行的重命名阶段
- 使用PowerShell脚本以获得更好的错误处理
- 添加详细的文件检查和日志输出
2. **改进日志输出**
- 为每个操作添加明确的开始/结束标记
- 使用不同的前缀区分不同的任务
- 在关键步骤后添加文件列表输出
3. **增强错误检查**
- 检查每个源文件是否存在
- 检查复制操作是否成功
- 记录文件大小以验证完整性
### 阶段2实现要点
1. **环境准备**
- 在Jenkins Agent上安装WiX Toolset 3.11
- 配置WIX_HOME环境变量
- 验证jpackage命令可用JDK 14+
2. **jpackage输入准备**
- 创建jpackage-input目录
- 复制slms-gui.jar到input目录
- 复制library.db到input目录
- 准备应用图标icon.ico
3. **jpackage执行**
- 首先创建app-image包含JRE的应用目录
- 然后基于app-image创建MSI安装包
- 验证生成的文件存在且大小合理
4. **回退机制**
- 如果jpackage失败保留JAR文件
- 在README中说明可用的格式
- 标记构建为UNSTABLE而非FAILURE
### 发布仓库配置
- 源代码推送到https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git (main分支)
- 制品推送到https://bdgit.educoder.net/pu6zrsfoy/slms.git (release分支)

@ -0,0 +1,95 @@
# Requirements Document
## Introduction
本需求文档定义了SLMS项目GUI应用的打包需求。当前Jenkins流水线使用gui-swing profile生成JAR文件但用户要求生成EXE和MSI格式的Windows原生安装包。本地打包可以成功但Jenkins流水线中失败。需要分析根本原因并实现可靠的jpackage打包方案。
## Glossary
- **jpackage**: Java 14+引入的打包工具,用于创建平台特定的安装包
- **WiX Toolset**: Windows Installer XML工具集jpackage在Windows上创建MSI需要此工具
- **gui-swing profile**: Maven profile生成包含所有依赖的独立JAR文件
- **Shaded JAR**: 使用maven-shade-plugin打包的包含所有依赖的JAR文件
- **Jenkins Agent**: 执行Jenkins构建任务的节点环境
- **本地环境**: 开发者本地Windows机器
- **制品 (Artifacts)**: 构建产生的可分发文件JAR, EXE, MSI, APK等
## Requirements
### Requirement 1: 环境差异分析
**User Story:** 作为DevOps工程师我想要了解本地环境和Jenkins环境的差异以便找出打包失败的根本原因。
#### Acceptance Criteria
1. WHEN 分析本地环境配置 THEN 系统SHALL记录JDK版本、WiX Toolset版本、环境变量配置
2. WHEN 分析Jenkins环境配置 THEN 系统SHALL记录Jenkins Agent的JDK版本、WiX Toolset安装状态、环境变量配置
3. WHEN 对比两个环境 THEN 系统SHALL识别所有关键差异点
4. WHEN 识别到WiX Toolset缺失 THEN 系统SHALL记录WIX_HOME环境变量状态
5. WHEN 识别到jpackage不可用 THEN 系统SHALL记录jpackage命令的可用性和版本
### Requirement 2: jpackage打包实现
**User Story:** 作为用户我想要获得EXE和MSI格式的GUI应用安装包以便在Windows上方便地安装和运行应用。
#### Acceptance Criteria
1. WHEN 执行GUI打包 THEN 系统SHALL使用jpackage创建Windows EXE可执行文件
2. WHEN 执行GUI打包 THEN 系统SHALL使用jpackage创建Windows MSI安装包
3. WHEN 双击EXE文件 THEN 应用SHALL正常启动并显示GUI界面
4. WHEN 运行MSI安装程序 THEN 系统SHALL将应用安装到指定目录
5. WHEN MSI安装完成后 THEN 用户SHALL能够从开始菜单或桌面快捷方式启动应用
6. WHEN 应用启动 THEN 系统SHALL加载library.db数据库文件
7. WHEN 应用运行 THEN 所有GUI功能图书管理、借阅管理SHALL正常工作
### Requirement 3: Jenkins流水线集成
**User Story:** 作为DevOps工程师我想要在Jenkins流水线中自动化GUI打包过程以便每次构建都能生成完整的制品。
#### Acceptance Criteria
1. WHEN Jenkins流水线执行到GUI打包阶段 THEN 系统SHALL检查jpackage工具的可用性
2. WHEN jpackage不可用 THEN 系统SHALL检查WiX Toolset的安装状态
3. WHEN WiX Toolset未安装 THEN 系统SHALL提供清晰的错误信息和安装指导
4. WHEN 所有依赖满足 THEN 系统SHALL成功执行jpackage打包
5. WHEN 打包完成 THEN 系统SHALL验证生成的EXE和MSI文件存在且大小合理
6. WHEN 打包失败 THEN 系统SHALL记录详细的错误日志并标记构建为失败
### Requirement 4: 制品归档和发布
**User Story:** 作为用户我想要所有构建制品CLI JAR、GUI JAR/EXE/MSI、Web WAR、Android APK都被正确归档和发布到头歌release分支以便下载使用。
#### Acceptance Criteria
1. WHEN 所有打包任务完成 THEN 系统SHALL归档以下制品slms-cli.jar, slms-gui.jar, slms-gui.exe, slms-gui-installer.msi, slms-web.war, slms-debug.apk, library.db
2. WHEN 归档制品 THEN 系统SHALL使用Jenkins archiveArtifacts功能保存制品
3. WHEN 推送到头歌 THEN 系统SHALL将所有制品复制到artifacts目录
4. WHEN 推送到头歌 THEN 系统SHALL创建包含构建信息的README.md文件
5. WHEN 推送到头歌 THEN 系统SHALL将artifacts目录推送到release分支
6. WHEN 推送完成 THEN 用户SHALL能够从头歌release分支下载所有制品
### Requirement 5: 错误处理和回退机制
**User Story:** 作为DevOps工程师我想要在jpackage打包失败时有合理的回退机制以便构建不会完全失败。
#### Acceptance Criteria
1. WHEN jpackage打包失败 THEN 系统SHALL记录详细错误信息
2. WHEN jpackage打包失败 THEN 系统SHALL继续生成gui-swing JAR作为备用
3. WHEN 使用备用方案 THEN 系统SHALL在构建日志中明确标注
4. WHEN 使用备用方案 THEN 系统SHALL将构建状态标记为UNSTABLE而非FAILURE
5. WHEN 构建完成 THEN 系统SHALL在邮件通知中说明哪些制品可用
### Requirement 6: 文档和使用说明
**User Story:** 作为用户我想要清晰的文档说明如何使用不同格式的GUI应用以便选择最适合的方式运行应用。
#### Acceptance Criteria
1. WHEN 生成EXE文件 THEN 系统SHALL创建README-GUI-EXE.txt说明文件
2. WHEN 生成MSI文件 THEN 系统SHALL创建README-GUI-MSI.txt说明文件
3. WHEN 生成JAR文件 THEN 系统SHALL创建README-GUI-JAR.txt说明文件
4. WHEN 创建README文件 THEN 文档SHALL包含系统要求、安装步骤、运行方法
5. WHEN 创建README文件 THEN 文档SHALL包含常见问题和故障排除指南
6. WHEN 推送到release分支 THEN 系统SHALL包含所有README文件

@ -0,0 +1,173 @@
# Implementation Plan
## 阶段1修复并行打包中的文件重命名问题保持并行
- [x] 1. 修复并行打包阶段的文件复制逻辑
- **保持并行执行,不改为串行**
- 在每个并行任务内部,确保文件复制命令正确执行
- 添加详细的调试输出以追踪问题
- _Requirements: 1.1, 1.2, 1.3, 4.1_
- [x] 1.1 修复CLI打包任务中的文件复制
- 在mvn package命令成功后立即执行文件复制
- 添加echo输出显示每个步骤
- 使用dir命令验证文件存在
- 复制smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar为slms-cli.jar
- 复制library.db到target目录
- _Requirements: 1.1_
- [x] 1.2 修复GUI打包任务中的文件复制
- 在mvn package命令成功后立即执行文件复制
- 添加echo输出显示每个步骤
- 复制smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar为slms-gui.jar
- 创建run-gui.bat启动脚本
- 创建README-GUI.txt说明文档
- 复制library.db到target目录
- _Requirements: 1.2, 6.3_
- [x] 1.3 修复Web打包任务中的文件复制
- 在mvn package命令成功后立即执行文件复制
- 添加echo输出显示每个步骤
- 复制smart-library-management-system-1.0-SNAPSHOT.war为slms-web.war
- _Requirements: 1.3_
- [x] 1.4 改进并行任务的日志输出格式
- 为每个任务的echo添加唯一前缀[CLI], [GUI], [Web], [Android]
- 在关键步骤前后添加分隔线
- 确保每个步骤都有明确的输出
- _Requirements: 3.5_
- [x] 1.5 添加文件验证步骤
- 在每个并行任务结束前,列出生成的文件
- 显示文件大小
- 如果关键文件缺失输出错误信息并exit /b 1
- _Requirements: 3.5, 3.6_
- [x] 2. 修复发布仓库地址
- 将release分支推送地址从CHZU_CS231_SEB_lab.git改为slms.git
- 保持main分支推送到CHZU_CS231_SEB_lab.git
- 更新所有相关的git remote和git push命令
- _Requirements: 4.5_
- [ ] 3. 测试阶段1修复
- 触发Jenkins构建
- 检查构建日志,确认所有文件复制步骤都有输出
- 验证target目录包含slms-cli.jar, slms-gui.jar, slms-web.war
- 验证归档包含所有制品
- 验证release分支更新成功
- _Requirements: 4.1, 4.2, 4.5_
## 阶段2实现jpackage打包在阶段1成功后
- [ ] 4. 添加环境检查阶段
- 创建新的stage检查jpackage和WiX Toolset
- 记录环境信息到构建日志
- 如果环境不满足跳过jpackage打包
- _Requirements: 1.1, 1.2, 1.4, 1.5_
- [ ] 4.1 实现jpackage可用性检查
- 执行jpackage --version命令
- 解析版本号需要JDK 14+
- 如果失败,记录警告并设置标志跳过后续步骤
- _Requirements: 3.1, 3.2_
- [ ] 4.2 实现WiX Toolset检查
- 检查WIX_HOME环境变量
- 检查candle.exe文件是否存在
- 如果失败,记录安装指导链接
- _Requirements: 3.3, 3.4_
- [ ] 5. 实现jpackage打包阶段
- 创建新的stage执行jpackage打包
- 仅在jpackage和WiX都可用时执行
- 使用when条件控制执行
- _Requirements: 2.1, 2.2_
- [ ] 5.1 准备jpackage输入目录
- 创建target/jpackage-input目录
- 复制slms-gui.jar到input目录
- 复制library.db到input目录
- 如果存在应用图标复制到input目录
- _Requirements: 2.1_
- [ ] 5.2 创建EXE可执行文件
- 执行jpackage --type app-image命令
- 指定--input, --main-jar, --main-class参数
- 设置--name, --app-version, --vendor参数
- 验证生成的EXE文件存在
- _Requirements: 2.1, 2.3_
- [ ] 5.3 创建MSI安装包
- 执行jpackage --type msi命令
- 基于app-image创建MSI
- 启用--win-menu, --win-dir-chooser, --win-shortcut选项
- 验证生成的MSI文件存在
- _Requirements: 2.2, 2.4, 2.5_
- [ ] 5.4 重命名和复制jpackage生成的文件
- 将生成的EXE重命名为slms-gui.exe
- 将生成的MSI重命名为slms-gui-installer.msi
- 复制到target目录以便归档
- _Requirements: 2.1, 2.2_
- [ ] 5.5 创建EXE和MSI的README文档
- 创建README-GUI-EXE.txt说明EXE使用方法
- 创建README-GUI-MSI.txt说明MSI安装步骤
- 包含系统要求、运行方法、故障排除
- _Requirements: 6.1, 6.2, 6.4_
- [ ] 6. 实现错误处理和回退机制
- 使用try-catch包装jpackage执行
- 如果jpackage失败记录详细错误信息
- 标记构建为UNSTABLE而非FAILURE
- 确保JAR文件仍然可用作备用
- _Requirements: 5.1, 5.2, 5.3, 5.4_
- [ ] 7. 更新归档和发布配置
- 更新archiveArtifacts包含*.exe和*.msi
- 更新stash包含EXE和MSI文件
- 更新release分支README说明EXE和MSI
- _Requirements: 4.1, 4.2, 4.4_
- [ ] 8. Jenkins环境配置
- 在Jenkins Agent上安装WiX Toolset 3.11
- 下载地址https://github.com/wixtoolset/wix3/releases
- 配置WIX_HOME环境变量指向安装目录
- 重启Jenkins服务使环境变量生效
- 验证jpackage和WiX都可用
- _Requirements: 3.1, 3.2, 3.3_
- [ ] 9. 本地测试jpackage
- 在本地Windows环境测试jpackage命令
- 验证生成的EXE可以双击运行
- 验证MSI安装程序可以正常安装
- 验证安装后的应用可以从开始菜单启动
- 测试所有GUI功能图书管理、借阅管理
- _Requirements: 2.3, 2.4, 2.5, 2.7_
- [ ] 10. Jenkins端到端测试
- 触发完整的Jenkins构建
- 验证所有制品都被生成JAR, EXE, MSI, WAR, APK
- 从Jenkins下载制品并测试
- 从release分支下载制品并测试
- 验证邮件通知包含所有制品信息
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 4.5_
- [ ] 11. 文档更新
- 更新项目README说明新的制品格式
- 创建jpackage故障排除指南
- 记录Jenkins环境配置步骤
- 创建用户使用指南如何选择JAR/EXE/MSI
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6_

@ -1,4 +1,4 @@
Started by user liudongliang
Generic Cause
Obtained Jenkinsfile from git http://localhost:3000/gitea/slms.git
[Pipeline] Start of Pipeline
[Pipeline] node
@ -18,11 +18,11 @@ Fetching upstream changes from http://localhost:3000/gitea/slms.git
using GIT_ASKPASS to set credentials slms-jenkins-gitea
> C:\Program Files\Git\bin\git.exe fetch --tags --force --progress -- http://localhost:3000/gitea/slms.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> C:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/main^{commit}" # timeout=10
Checking out Revision be6b702bd245afab7bd1437b5ff4a09549a5ef37 (refs/remotes/origin/main)
Checking out Revision 41f48f5214672343afd56ef8b0595283803ba1a3 (refs/remotes/origin/main)
> C:\Program Files\Git\bin\git.exe config core.sparsecheckout # timeout=10
> C:\Program Files\Git\bin\git.exe checkout -f be6b702bd245afab7bd1437b5ff4a09549a5ef37 # timeout=10
Commit message: "docs: Add GUI packaging quick reference guide"
> C:\Program Files\Git\bin\git.exe rev-list --no-walk be6b702bd245afab7bd1437b5ff4a09549a5ef37 # timeout=10
> C:\Program Files\Git\bin\git.exe checkout -f 41f48f5214672343afd56ef8b0595283803ba1a3 # timeout=10
Commit message: "debug: Add more logging to packaging stages"
> C:\Program Files\Git\bin\git.exe rev-list --no-walk 119111bb3572020dcbd14d3ce02366c8dee01de9 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
@ -83,10 +83,10 @@ Fetching upstream changes from http://localhost:3000/gitea/slms.git
using GIT_ASKPASS to set credentials Gitea Repository Credentials
> C:\Program Files\Git\bin\git.exe fetch --no-tags --force --progress --depth=1 -- http://localhost:3000/gitea/slms.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> C:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/main^{commit}" # timeout=10
Checking out Revision be6b702bd245afab7bd1437b5ff4a09549a5ef37 (refs/remotes/origin/main)
Checking out Revision 41f48f5214672343afd56ef8b0595283803ba1a3 (refs/remotes/origin/main)
> C:\Program Files\Git\bin\git.exe config core.sparsecheckout # timeout=10
> C:\Program Files\Git\bin\git.exe checkout -f be6b702bd245afab7bd1437b5ff4a09549a5ef37 # timeout=10
Commit message: "docs: Add GUI packaging quick reference guide"
> C:\Program Files\Git\bin\git.exe checkout -f 41f48f5214672343afd56ef8b0595283803ba1a3 # timeout=10
Commit message: "debug: Add more logging to packaging stages"
Cleaning workspace
> C:\Program Files\Git\bin\git.exe rev-parse --verify HEAD # timeout=10
Resetting working tree
@ -165,8 +165,8 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn clean compile test-com
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.383 s
[INFO] Finished at: 2025-11-26T13:56:48+08:00
[INFO] Total time: 16.294 s
[INFO] Finished at: 2025-11-26T17:58:18+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] echo
✓ 项ç®ç¼è¯æˆ<C3A6>功
@ -225,7 +225,7 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn test
æ•°æ<EFBFBD>®åº“连接已关闭!
æ•°æ<EFBFBD>®åº“表åˆ<EFBFBD>å§åŒå®Œæˆ<EFBFBD>!
æ•°æ<EFBFBD>®åº“连接æˆ<EFBFBD>功!
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.95 s - in com.smartlibrary.database.DatabaseConnectionTest
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.25 s - in com.smartlibrary.database.DatabaseConnectionTest
[INFO] Running com.smartlibrary.observer.BookStatusManagerTest
正在å<EFBFBD>é€<EFBFBD>é®ä»¶...
SMTPæœ<EFBFBD>务器: smtp.example.com:587
@ -251,21 +251,21 @@ SMTP服务器: smtp.example.com:587
收件人: 13800138000
内容: 借阅ID:1 状æ€<C3A6>å·²æ´æ°ï¼šå€Ÿé˜…å<E280A6>³å°†åˆ°æœŸ
短信å<EFBFBD>é€<EFBFBD>æˆ<EFBFBD>功!
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.139 s - in com.smartlibrary.observer.BookStatusManagerTest
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.16 s - in com.smartlibrary.observer.BookStatusManagerTest
[INFO] Running com.smartlibrary.factory.BookFactoryTest
创建期刊: 计算机学报
创建实体书: æµè¯•书ç±<C3A7>
创建实体书: Javaç¼ç¨æ€<C3A6>想
åˆå»ºç”µå­<EFBFBD>书: 设计模å¼<C3A5>
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.077 s - in com.smartlibrary.factory.BookFactoryTest
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.102 s - in com.smartlibrary.factory.BookFactoryTest
[INFO] Running com.smartlibrary.mock.MockDataTest
创建实体书: 测试实体书
åˆå»ºç”µå­<EFBFBD>书: æµè¯•电å­<C3A5>书
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.036 s - in com.smartlibrary.mock.MockDataTest
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.067 s - in com.smartlibrary.mock.MockDataTest
[INFO] Running com.smartlibrary.model.BookTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 s - in com.smartlibrary.model.BookTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.061 s - in com.smartlibrary.model.BookTest
[INFO] Running com.smartlibrary.model.LoanTest
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.01 s - in com.smartlibrary.model.LoanTest
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 s - in com.smartlibrary.model.LoanTest
[INFO] Running com.smartlibrary.notification.NotificationTest
正在å<EFBFBD>é€<EFBFBD>应用内通知...
应用å<EFBFBD><EFBFBD>ç§°: å¾ä¹¦é¦†ç®¡ç<C2A1>†ç³»ç»Ÿ
@ -289,7 +289,7 @@ SMTP服务器: smtp.example.com:587
内容: 测试内容
é®ä»¶å<EFBFBD>é€<EFBFBD>æˆ<EFBFBD>功!
无效的é®ä»¶åœ°å<EFBFBD>€: invalid-email
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 s - in com.smartlibrary.notification.NotificationTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s - in com.smartlibrary.notification.NotificationTest
[INFO] Running com.smartlibrary.observer.ObserverTest
å<EFBFBD>é€<EFBFBD>通知给所有用户:
正在å<EFBFBD>é€<EFBFBD>应用内通知...
@ -384,7 +384,7 @@ SMTP服务器: smtp.example.com:587
借阅日期: 2025-11-26
应还日期: 2025-12-26
状æ€<EFBFBD>: 图书归还
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 s - in com.smartlibrary.observer.ObserverTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.03 s - in com.smartlibrary.observer.ObserverTest
[INFO]
[INFO] Results:
[INFO]
@ -397,8 +397,8 @@ SMTP服务器: smtp.example.com:587
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.940 s
[INFO] Finished at: 2025-11-26T13:57:06+08:00
[INFO] Total time: 14.227 s
[INFO] Finished at: 2025-11-26T17:58:39+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] echo
✓ æµè¯•执行完æˆ<C3A6>
@ -443,41 +443,42 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn sonar:sonar -Dsonar.qu
[INFO] Default locale: "zh_CN", source code encoding: "UTF-8"
[WARNING] Property 'env.SONARQUBE_SCANNER_PARAMS' is encrypted. The encryption of scanner properties is deprecated and will soon be removed.
[INFO] Load global settings
[INFO] Load global settings (done) | time=241ms
[INFO] Load global settings (done) | time=378ms
[INFO] Server id: 147B411E-AZqM7Cb9i6TlQ4AbupxC
[INFO] Loading required plugins
[INFO] Load plugins index
[INFO] Load plugins index (done) | time=33ms
[INFO] Load plugins index (done) | time=48ms
[INFO] Load/download plugins
[INFO] Load/download plugins (done) | time=38ms
[INFO] Load/download plugins (done) | time=50ms
[INFO] Process project properties
[INFO] Process project properties (done) | time=56ms
[INFO] Process project properties (done) | time=129ms
[INFO] Project key: com.smartlibrary:smart-library-management-system
[INFO] Base dir: E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS
[INFO] Working dir: E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\sonar
[INFO] Load project settings for component key: 'com.smartlibrary:smart-library-management-system'
[INFO] Load project settings for component key: 'com.smartlibrary:smart-library-management-system' (done) | time=37ms
[INFO] Load quality profiles
[INFO] Load quality profiles (done) | time=209ms
[INFO] Load quality profiles (done) | time=201ms
[INFO] Auto-configuring with CI 'Jenkins'
[INFO] Load active rules
[INFO] Load active rules (done) | time=757ms
[INFO] Load active rules (done) | time=1121ms
[INFO] Load analysis cache
[INFO] Load analysis cache (404) | time=12ms
[INFO] Load analysis cache (2.1 kB) | time=146ms
[INFO] Preprocessing files...
[INFO] 2 languages detected in 45 preprocessed files (done) | time=221ms
[INFO] 2 languages detected in 45 preprocessed files (done) | time=247ms
[INFO] Loading plugins for detected languages
[INFO] Load/download plugins
[INFO] Load/download plugins (done) | time=20ms
[INFO] Load/download plugins (done) | time=24ms
[INFO] Load project repositories
[INFO] Load project repositories (done) | time=14ms
[INFO] Load project repositories (done) | time=693ms
[INFO] Indexing files...
[INFO] Project configuration:
[INFO] 45 files indexed (done) | time=52ms
[INFO] 45 files indexed (done) | time=43ms
[INFO] Quality profile for java: Sonar way
[INFO] Quality profile for xml: Sonar way
[INFO] ------------- Run sensors on module smart-library-management-system
[INFO] Load metrics repository
[INFO] Load metrics repository (done) | time=80ms
[INFO] Load metrics repository (done) | time=68ms
[INFO] Sensor JavaSensor [java]
[INFO] Configured Java source version (sonar.java.source): 11, preview features enabled (sonar.java.enablePreview): false
[INFO] Server-side caching is enabled. The Java analyzer will not try to leverage data from a previous analysis.
@ -493,26 +494,26 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn sonar:sonar -Dsonar.qu
[INFO] Batch processing: Done.
[INFO] Did not optimize analysis for any files, performed a full analysis for all 15 files.
[INFO] No "Generated" source files to scan.
[INFO] Sensor JavaSensor [java] (done) | time=18697ms
[INFO] Sensor JavaSensor [java] (done) | time=21330ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=415ms
[INFO] Sensor SurefireSensor [java] (done) | time=744ms
[INFO] Sensor XML Sensor [xml]
[INFO] 1 source file to be analyzed
[INFO] 1/1 source file has been analyzed
[INFO] Sensor XML Sensor [xml] (done) | time=657ms
[INFO] Sensor XML Sensor [xml] (done) | time=840ms
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
[INFO] Importing 1 report(s). Turn your logs in debug mode in order to see the exhaustive list.
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=445ms
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=409ms
[INFO] Sensor IaC Docker Sensor [iac]
[INFO] There are no files to be analyzed for the Docker language
[INFO] Sensor IaC Docker Sensor [iac] (done) | time=5ms
[INFO] Sensor IaC Docker Sensor [iac] (done) | time=6ms
[INFO] Sensor IaC hadolint report Sensor [iac]
[INFO] Sensor IaC hadolint report Sensor [iac] (done) | time=11ms
[INFO] Sensor IaC hadolint report Sensor [iac] (done) | time=12ms
[INFO] Sensor Java Config Sensor [iac]
[INFO] There are no files to be analyzed for the Java language
[INFO] Sensor Java Config Sensor [iac] (done) | time=69ms
[INFO] Sensor Java Config Sensor [iac] (done) | time=68ms
[INFO] Sensor TextAndSecretsSensor [text]
[INFO] Available processors: 20
[INFO] Using 20 threads for analysis.
@ -522,33 +523,33 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn sonar:sonar -Dsonar.qu
[INFO] Starting the text and secrets analysis
[INFO] 45 source files to be analyzed for the text and secrets analysis
[INFO] 45/45 source files have been analyzed for the text and secrets analysis
[INFO] Sensor TextAndSecretsSensor [text] (done) | time=2560ms
[INFO] Sensor TextAndSecretsSensor [text] (done) | time=3091ms
[INFO] ------------- Run sensors on project
[INFO] Sensor JavaProjectSensor [java]
[INFO] Sensor JavaProjectSensor [java] (done) | time=4ms
[INFO] Sensor JavaProjectSensor [java] (done) | time=5ms
[INFO] Sensor Zero Coverage Sensor
[INFO] Sensor Zero Coverage Sensor (done) | time=2ms
[INFO] Sensor Zero Coverage Sensor (done) | time=3ms
[INFO] Sensor Java CPD Block Indexer
[INFO] Sensor Java CPD Block Indexer (done) | time=291ms
[INFO] Sensor Java CPD Block Indexer (done) | time=218ms
[INFO] ------------- Gather SCA dependencies on project
[INFO] Dependency analysis skipped
[INFO] SCM Publisher is disabled
[INFO] CPD Executor 6 files had no CPD blocks
[INFO] CPD Executor Calculating CPD for 23 files
[INFO] CPD Executor CPD calculation finished (done) | time=200ms
[INFO] SCM revision ID 'be6b702bd245afab7bd1437b5ff4a09549a5ef37'
[INFO] Analysis report generated in 727ms, dir size=729.1 kB
[INFO] Analysis report compressed in 5180ms, zip size=211.4 kB
[INFO] Analysis report uploaded in 9641ms
[INFO] CPD Executor CPD calculation finished (done) | time=204ms
[INFO] SCM revision ID '41f48f5214672343afd56ef8b0595283803ba1a3'
[INFO] Analysis report generated in 840ms, dir size=730.3 kB
[INFO] Analysis report compressed in 3338ms, zip size=211.4 kB
[INFO] Analysis report uploaded in 135ms
[INFO] ------------- Check Quality Gate status
[INFO] Waiting for the analysis report to be processed (max 300s)
[INFO] QUALITY GATE STATUS: PASSED - View details on http://localhost:9000/dashboard?id=com.smartlibrary%3Asmart-library-management-system
[INFO] Analysis total time: 1:11.942 s
[INFO] Analysis total time: 1:02.039 s
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:17 min
[INFO] Finished at: 2025-11-26T13:58:31+08:00
[INFO] Total time: 01:09 min
[INFO] Finished at: 2025-11-26T17:59:56+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] }
[Pipeline] // withSonarQubeEnv
@ -577,9 +578,9 @@ Timeout set to expire in 10 min
Injecting SonarQube environment variables using the configuration: SonarQube
[Pipeline] {
[Pipeline] waitForQualityGate
Checking status of SonarQube task 'b6fced77-6149-4c60-8e87-4fbe85467bfc' on server 'SonarQube'
SonarQube task 'b6fced77-6149-4c60-8e87-4fbe85467bfc' status is 'SUCCESS'
SonarQube task 'b6fced77-6149-4c60-8e87-4fbe85467bfc' completed. Quality gate is 'OK'
Checking status of SonarQube task 'c5c3ecb9-b67f-4bde-8bde-522c0bc86cb7' on server 'SonarQube'
SonarQube task 'c5c3ecb9-b67f-4bde-8bde-522c0bc86cb7' status is 'SUCCESS'
SonarQube task 'c5c3ecb9-b67f-4bde-8bde-522c0bc86cb7' completed. Quality gate is 'OK'
[Pipeline] echo
✓ SLMS-Quality-Gate è´¨é‡<C3A9>é—¨ç¦<C3A7>检查通过: OK
[Pipeline] }
@ -601,33 +602,38 @@ SonarQube task 'b6fced77-6149-4c60-8e87-4fbe85467bfc' completed. Quality gate is
[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
========== 澶嶅埗 target 鐩<>綍鐢ㄤ簬骞惰<EFBFBD>鎵撳寘 ==========
========== 鍑嗗<EFBFBD>骞惰<EFBFBD>鎵撳寘 ==========
[Pipeline] bat
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>REM 涓?CLI銆丟UI銆乄eb銆丄ndroid 鍒涘缓鐙<E7BC93>珛鐨?target 鍓<>
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 妫€鏌ョ紪璇戠粨鏋?..
妫€鏌ョ紪璇戠粨鏋?..
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 澶嶅埗 target 鍒?target-cli...
澶嶅埗 target 鍒?target-cli...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>if exist target\classes (echo 鉁?缂栬瘧瀹屾垚锛宑lasses 鐩<>綍瀛樺湪 ) else (echo 鈿狅笍 璀﹀憡: classes 鐩<>綍涓嶅瓨鍦? )
鉁?缂栬瘧瀹屾垚锛宑lasses 鐩<>綍瀛樺湪
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>xcopy /E /I /Y /Q target target-cli 1>nul
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo.
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 澶嶅埗 target 鍒?target-gui...
澶嶅埗 target 鍒?target-gui...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>xcopy /E /I /Y /Q target target-gui 1>nul
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鍑嗗<E98D91>寮€濮嬪洓绔<E6B493>苟琛屾墦鍖?
鍑嗗<EFBFBD>寮€濮嬪洓绔<EFBFBD>苟琛屾墦鍖?
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 澶嶅埗 target 鍒?target-web...
澶嶅埗 target 鍒?target-web...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鈥?CLI: 浣跨敤 -Pcli profile
鈥?CLI: 浣跨敤 -Pcli profile
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>xcopy /E /I /Y /Q target target-web 1>nul
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鈥?GUI: 浣跨敤 -Pgui-swing profile
鈥?GUI: 浣跨敤 -Pgui-swing profile
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 澶嶅埗 target 鍒?target-android...
澶嶅埗 target 鍒?target-android...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鈥?Web: 浣跨敤 -Pweb profile
鈥?Web: 浣跨敤 -Pweb profile
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>xcopy /E /I /Y /Q target target-android 1>nul
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鈥?Android: 浣跨敤 Gradle
鈥?Android: 浣跨敤 Gradle
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鉁?target 鐩<>綍澶嶅埗瀹屾垚锛?浠斤級锛屽噯澶囧苟琛屾墦鍖?
鉁?target 鐩<>綍澶嶅埗瀹屾垚锛?浠斤級锛屽噯澶囧苟琛屾墦鍖?
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo.
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鉁?鍑嗗<E98D91>瀹屾垚锛屽紑濮嬪苟琛屾墦鍖?
鉁?鍑嗗<E98D91>瀹屾垚锛屽紑濮嬪苟琛屾墦鍖?
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
@ -636,13 +642,13 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo
[Pipeline] { (7. 四端并行打包)
[Pipeline] parallel
[Pipeline] { (Branch: 7.1 CLI 打包 (JAR))
[Pipeline] { (Branch: 7.2 GUI 鎵撳寘 (JAR + EXE))
[Pipeline] { (Branch: 7.2 GUI 鎵撳寘 (Swing JAR))
[Pipeline] { (Branch: 7.3 Web 打包 (WAR))
[Pipeline] { (Branch: 7.4 Android Gradle 打包 (APK))
[Pipeline] stage
[Pipeline] { (7.1 CLI 打包 (JAR))
[Pipeline] stage
[Pipeline] { (7.2 GUI 鎵撳寘 (JAR + EXE))
[Pipeline] { (7.2 GUI 鎵撳寘 (Swing JAR))
[Pipeline] stage
[Pipeline] { (7.3 Web 打包 (WAR))
[Pipeline] stage
@ -675,45 +681,27 @@ E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo
========== 打包 CLI 应用 (JAR) ==========
[Pipeline] bat
[Pipeline] echo
========== 鎵撳寘 GUI 搴旂敤 (JAR + EXE) ==========
[Pipeline] script
[Pipeline] {
========== 鎵撳寘 GUI Swing 搴旂敤 (鐙<>珛 JAR) ==========
[Pipeline] bat
[Pipeline] echo
========== 打包 Web 应用 (WAR) ==========
[Pipeline] bat
[Pipeline] echo
========== 打包 Android 应用 (APK) ==========
[Pipeline] bat
[Pipeline] bat
[CLI] 寮€濮嬫墦鍖?..
[GUI] 寮€濮嬫墦鍖?..
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>set JAVA_HOME=E:\2025-2026\GitAIOps\jdk
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 浣跨敤 target-cli 鎵撳寘 CLI 搴旂敤...
浣跨敤 target-cli 鎵撳寘 CLI 搴旂敤...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 鎵撳寘 Web 搴旂敤...
鎵撳寘 Web 搴旂敤...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>REM 涓存椂璁剧疆 Maven 杈撳嚭鐩<E59AAD>綍涓?target-cli
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>REM 浣跨敤 Web profile 鎵撳寘
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn package -Pcli -DskipTests -Dmaven.compiler.skip=true -Dmaven.build.directory=target-cli
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>set JAVA_HOME=E:\2025-2026\GitAIOps\jdk
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 浣跨敤 target-web 鎵撳寘 Web 搴旂敤...
浣跨敤 target-web 鎵撳寘 Web 搴旂敤...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>REM 涓存椂璁剧疆 Maven 杈撳嚭鐩<E59AAD>綍涓?target-web
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn package -Pweb -DskipTests -Dmaven.compiler.skip=true -Dmaven.build.directory=target-web
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn package -Pweb -DskipTests -Dmaven.compiler.skip=true
打包 Android 应用...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>set JAVA_HOME=E:\2025-2026\GitAIOps\jdk
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>echo 浣跨敤 target-gui 鎵撳寘 GUI 搴旂敤...
浣跨敤 target-gui 鎵撳寘 GUI 搴旂敤...
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>REM 涓存椂璁剧疆 Maven 杈撳嚭鐩<E59AAD>綍涓?target-gui
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS>mvn package -Pgui -DskipTests -Dmaven.compiler.skip=true -Dmaven.build.directory=target-gui
Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reused, use --status for details
Starting a Gradle Daemon, 2 incompatible and 2 stopped Daemons could not be reused, use --status for details
[INFO] Scanning for projects...
[INFO]
[INFO] ----------< com.smartlibrary:smart-library-management-system >----------
@ -721,12 +709,12 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] Scanning for projects...
[INFO] Scanning for projects...
[INFO]
[INFO] ----------< com.smartlibrary:smart-library-management-system >----------
[INFO] Building smart-library-management-system 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ war ]---------------------------------
[INFO] Scanning for projects...
[INFO]
[INFO] ----------< com.smartlibrary:smart-library-management-system >----------
[INFO] Building smart-library-management-system 1.0-SNAPSHOT
@ -748,6 +736,7 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ smart-library-management-system ---
[INFO] Copying 7 resources from src\main\resources to target\classes
[INFO] Copying 1 resource from to target\classes
[INFO]
[INFO] --- compiler:3.8.1:compile (default-compile) @ smart-library-management-system ---
[INFO] Copying 7 resources from src\main\resources to target\classes
@ -755,7 +744,6 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO]
[INFO] --- compiler:3.8.1:compile (default-compile) @ smart-library-management-system ---
[INFO] Copying 7 resources from src\main\resources to target\classes
[INFO] Copying 1 resource from to target\classes
[INFO]
[INFO] --- compiler:3.8.1:compile (default-compile) @ smart-library-management-system ---
[INFO] Nothing to compile - all classes are up to date
@ -766,7 +754,10 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO] --- compiler:3.8.1:testCompile (default-testCompile) @ smart-library-management-system ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- surefire:3.0.0-M7:test (default-test) @ smart-library-management-system ---
[INFO] --- resources:3.3.1:testResources (default-testResources) @ smart-library-management-system ---
[INFO] skip non existing resourceDirectory E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\src\test\resources
[INFO]
[INFO] --- compiler:3.8.1:testCompile (default-testCompile) @ smart-library-management-system ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ smart-library-management-system ---
@ -778,10 +769,7 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO] --- surefire:3.0.0-M7:test (default-test) @ smart-library-management-system ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ smart-library-management-system ---
[INFO] skip non existing resourceDirectory E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\src\test\resources
[INFO]
[INFO] --- compiler:3.8.1:testCompile (default-testCompile) @ smart-library-management-system ---
[INFO] --- surefire:3.0.0-M7:test (default-test) @ smart-library-management-system ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- surefire:3.0.0-M7:test (default-test) @ smart-library-management-system ---
@ -806,13 +794,12 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO] --- jar:3.3.0:jar (default-jar) @ smart-library-management-system ---
[INFO]
[INFO] --- war:3.3.2:war (default-war) @ smart-library-management-system ---
[INFO] Building jar: E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\smart-library-management-system-1.0-SNAPSHOT.jar
[INFO] Packaging webapp
[INFO] Assembling webapp [smart-library-management-system] in [E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\smart-library-management-system-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Building jar: E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\smart-library-management-system-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- dependency:3.6.0:copy-dependencies (copy-dependencies) @ smart-library-management-system ---
[INFO] Building jar: E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\smart-library-management-system-1.0-SNAPSHOT.jar
[INFO] --- shade:3.5.0:shade (default) @ smart-library-management-system ---
[INFO]
[INFO] --- shade:3.5.0:shade (default) @ smart-library-management-system ---
[INFO] Including org.xerial:sqlite-jdbc:jar:3.36.0.3 in the shaded jar.
@ -862,73 +849,62 @@ Starting a Gradle Daemon, 2 incompatible and 1 stopped Daemons could not be reus
[INFO] Including org.openjfx:javafx-base:jar:win:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-fxml:jar:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-fxml:jar:win:17 in the shaded jar.
[INFO] Including org.xerial:sqlite-jdbc:jar:3.36.0.3 in the shaded jar.
[INFO] Including org.slf4j:slf4j-api:jar:1.7.32 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-starter-web:jar:2.7.5 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-starter:jar:2.7.5 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot:jar:2.7.5 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-autoconfigure:jar:2.7.5 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-starter-logging:jar:2.7.5 in the shaded jar.
[INFO] Including ch.qos.logback:logback-classic:jar:1.2.11 in the shaded jar.
[INFO] Including ch.qos.logback:logback-core:jar:1.2.11 in the shaded jar.
[INFO] Including org.apache.logging.log4j:log4j-to-slf4j:jar:2.17.2 in the shaded jar.
[INFO] Including org.apache.logging.log4j:log4j-api:jar:2.17.2 in the shaded jar.
[INFO] Including org.slf4j:jul-to-slf4j:jar:1.7.36 in the shaded jar.
[INFO] Including jakarta.annotation:jakarta.annotation-api:jar:1.3.5 in the shaded jar.
[INFO] Including org.springframework:spring-core:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework:spring-jcl:jar:5.3.23 in the shaded jar.
[INFO] Including org.yaml:snakeyaml:jar:1.30 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-starter-json:jar:2.7.5 in the shaded jar.
[INFO] Including com.fasterxml.jackson.core:jackson-databind:jar:2.13.4.2 in the shaded jar.
[INFO] Including com.fasterxml.jackson.core:jackson-annotations:jar:2.13.4 in the shaded jar.
[INFO] Including com.fasterxml.jackson.core:jackson-core:jar:2.13.4 in the shaded jar.
[INFO] Including com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.13.4 in the shaded jar.
[INFO] Including com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.13.4 in the shaded jar.
[INFO] Including com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.13.4 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-starter-tomcat:jar:2.7.5 in the shaded jar.
[INFO] Including org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.68 in the shaded jar.
[INFO] Including org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.68 in the shaded jar.
[INFO] Including org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.68 in the shaded jar.
[INFO] Including org.springframework:spring-web:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework:spring-beans:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework:spring-webmvc:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework:spring-aop:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework:spring-context:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework:spring-expression:jar:5.3.23 in the shaded jar.
[INFO] Including org.springframework.boot:spring-boot-starter-thymeleaf:jar:2.7.5 in the shaded jar.
[INFO] Including org.thymeleaf:thymeleaf-spring5:jar:3.0.15.RELEASE in the shaded jar.
[INFO] Including org.thymeleaf:thymeleaf:jar:3.0.15.RELEASE in the shaded jar.
[INFO] Including org.attoparser:attoparser:jar:2.0.5.RELEASE in the shaded jar.
[INFO] Including org.unbescape:unbescape:jar:1.1.6.RELEASE in the shaded jar.
[INFO] Including org.thymeleaf.extras:thymeleaf-extras-java8time:jar:3.0.4.RELEASE in the shaded jar.
[INFO] Including org.openjfx:javafx-controls:jar:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-controls:jar:win:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-graphics:jar:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-graphics:jar:win:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-base:jar:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-base:jar:win:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-fxml:jar:17 in the shaded jar.
[INFO] Including org.openjfx:javafx-fxml:jar:win:17 in the shaded jar.
[INFO] Building war: E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\smart-library-management-system-1.0-SNAPSHOT.war
[INFO] Copying sqlite-jdbc-3.36.0.3.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\sqlite-jdbc-3.36.0.3.jar
[INFO] Copying slf4j-api-1.7.32.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\slf4j-api-1.7.32.jar
[INFO] Copying spring-boot-starter-web-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-starter-web-2.7.5.jar
[INFO] Copying spring-boot-starter-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-starter-2.7.5.jar
[INFO] Copying spring-boot-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-2.7.5.jar
[INFO] Copying spring-boot-autoconfigure-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-autoconfigure-2.7.5.jar
[INFO] Copying spring-boot-starter-logging-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-starter-logging-2.7.5.jar
[INFO] Copying logback-classic-1.2.11.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\logback-classic-1.2.11.jar
[INFO] Copying logback-core-1.2.11.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\logback-core-1.2.11.jar
[INFO] Copying log4j-to-slf4j-2.17.2.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\log4j-to-slf4j-2.17.2.jar
[INFO] Copying log4j-api-2.17.2.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\log4j-api-2.17.2.jar
[INFO] Copying jul-to-slf4j-1.7.36.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jul-to-slf4j-1.7.36.jar
[INFO] Copying jakarta.annotation-api-1.3.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jakarta.annotation-api-1.3.5.jar
[INFO] Copying spring-core-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-core-5.3.23.jar
[INFO] Copying spring-jcl-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-jcl-5.3.23.jar
[INFO] Copying snakeyaml-1.30.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\snakeyaml-1.30.jar
[INFO] Copying spring-boot-starter-json-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-starter-json-2.7.5.jar
[INFO] Copying jackson-databind-2.13.4.2.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jackson-databind-2.13.4.2.jar
[INFO] Copying jackson-annotations-2.13.4.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jackson-annotations-2.13.4.jar
[INFO] Copying jackson-core-2.13.4.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jackson-core-2.13.4.jar
[INFO] Copying jackson-datatype-jdk8-2.13.4.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jackson-datatype-jdk8-2.13.4.jar
[INFO] Copying jackson-datatype-jsr310-2.13.4.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jackson-datatype-jsr310-2.13.4.jar
[INFO] Copying jackson-module-parameter-names-2.13.4.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\jackson-module-parameter-names-2.13.4.jar
[INFO] Copying spring-boot-starter-tomcat-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-starter-tomcat-2.7.5.jar
[INFO] Copying tomcat-embed-core-9.0.68.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\tomcat-embed-core-9.0.68.jar
[INFO] Copying tomcat-embed-el-9.0.68.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\tomcat-embed-el-9.0.68.jar
[INFO] Copying tomcat-embed-websocket-9.0.68.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\tomcat-embed-websocket-9.0.68.jar
[INFO] Copying spring-web-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-web-5.3.23.jar
[INFO] Copying spring-beans-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-beans-5.3.23.jar
[INFO] Copying spring-webmvc-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-webmvc-5.3.23.jar
[INFO] Copying spring-aop-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-aop-5.3.23.jar
[INFO] Copying spring-context-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-context-5.3.23.jar
[INFO] Copying spring-expression-5.3.23.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-expression-5.3.23.jar
[INFO] Copying spring-boot-starter-thymeleaf-2.7.5.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\spring-boot-starter-thymeleaf-2.7.5.jar
[INFO] Copying thymeleaf-spring5-3.0.15.RELEASE.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\thymeleaf-spring5-3.0.15.RELEASE.jar
[INFO] Copying thymeleaf-3.0.15.RELEASE.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\thymeleaf-3.0.15.RELEASE.jar
[INFO] Copying attoparser-2.0.5.RELEASE.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\attoparser-2.0.5.RELEASE.jar
[INFO] Copying unbescape-1.1.6.RELEASE.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\unbescape-1.1.6.RELEASE.jar
[INFO] Copying thymeleaf-extras-java8time-3.0.4.RELEASE.jar to E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target\libs\thymeleaf-extras-java8time-3.0.4.RELEASE.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.681 s
[INFO] Finished at: 2025-11-26T13:58:57+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] bat
========== 浣跨敤 jpackage 鍒涘缓 EXE ==========
鉁?jpackage 鍙<>
此时不应有 \WiX。
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
Failed in branch 7.2 GUI 鎵撳寘 (JAR + EXE)
[INFO]
[INFO] --- spring-boot:2.7.5:repackage (default) @ smart-library-management-system ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.095 s
[INFO] Finished at: 2025-11-26T13:59:01+08:00
[INFO] Total time: 12.403 s
[INFO] Finished at: 2025-11-26T18:00:21+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] echo
✓ Web WAR 打包æˆ<C3A6>功
@ -942,6 +918,11 @@ Failed in branch 7.2 GUI 打包 (JAR + EXE)
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
> Configure project :android
WARNING: The option setting 'android.overridePathCheck=true' is experimental.
@ -952,6 +933,59 @@ The current default is 'false'.
[WARNING] spring-aop-5.3.23.jar, spring-beans-5.3.23.jar, spring-context-5.3.23.jar, spring-core-5.3.23.jar, spring-expression-5.3.23.jar, spring-jcl-5.3.23.jar, spring-web-5.3.23.jar, spring-webmvc-5.3.23.jar define 2 overlapping resources:
[WARNING] - META-INF/license.txt
[WARNING] - META-INF/notice.txt
[WARNING] spring-beans-5.3.23.jar, spring-boot-2.7.5.jar, spring-boot-autoconfigure-2.7.5.jar define 1 overlapping resource:
[WARNING] - META-INF/spring.factories
[WARNING] spring-web-5.3.23.jar, tomcat-embed-el-9.0.68.jar, tomcat-embed-websocket-9.0.68.jar define 1 overlapping resource:
[WARNING] - META-INF/web-fragment.xml
[WARNING] spring-boot-2.7.5.jar, spring-boot-autoconfigure-2.7.5.jar define 2 overlapping resources:
[WARNING] - META-INF/additional-spring-configuration-metadata.json
[WARNING] - META-INF/spring-configuration-metadata.json
[WARNING] attoparser-2.0.5.RELEASE.jar, spring-boot-2.7.5.jar, spring-boot-autoconfigure-2.7.5.jar, spring-boot-starter-2.7.5.jar, spring-boot-starter-json-2.7.5.jar, spring-boot-starter-logging-2.7.5.jar, spring-boot-starter-thymeleaf-2.7.5.jar, spring-boot-starter-tomcat-2.7.5.jar, spring-boot-starter-web-2.7.5.jar, thymeleaf-3.0.15.RELEASE.jar, thymeleaf-extras-java8time-3.0.4.RELEASE.jar, thymeleaf-spring5-3.0.15.RELEASE.jar, unbescape-1.1.6.RELEASE.jar define 2 overlapping resources:
[WARNING] - META-INF/LICENSE.txt
[WARNING] - META-INF/NOTICE.txt
[WARNING] attoparser-2.0.5.RELEASE.jar, jackson-annotations-2.13.4.jar, jackson-core-2.13.4.jar, jackson-databind-2.13.4.2.jar, jackson-datatype-jdk8-2.13.4.jar, jackson-datatype-jsr310-2.13.4.jar, jackson-module-parameter-names-2.13.4.jar, jakarta.annotation-api-1.3.5.jar, javafx-base-17-win.jar, javafx-base-17.jar, javafx-controls-17-win.jar, javafx-controls-17.jar, javafx-fxml-17-win.jar, javafx-fxml-17.jar, javafx-graphics-17-win.jar, javafx-graphics-17.jar, jul-to-slf4j-1.7.36.jar, log4j-api-2.17.2.jar, log4j-to-slf4j-2.17.2.jar, logback-classic-1.2.11.jar, logback-core-1.2.11.jar, slf4j-api-1.7.32.jar, smart-library-management-system-1.0-SNAPSHOT.jar, snakeyaml-1.30.jar, spring-aop-5.3.23.jar, spring-beans-5.3.23.jar, spring-boot-2.7.5.jar, spring-boot-autoconfigure-2.7.5.jar, spring-boot-starter-2.7.5.jar, spring-boot-starter-json-2.7.5.jar, spring-boot-starter-logging-2.7.5.jar, spring-boot-starter-thymeleaf-2.7.5.jar, spring-boot-starter-tomcat-2.7.5.jar, spring-boot-starter-web-2.7.5.jar, spring-context-5.3.23.jar, spring-core-5.3.23.jar, spring-expression-5.3.23.jar, spring-jcl-5.3.23.jar, spring-web-5.3.23.jar, spring-webmvc-5.3.23.jar, sqlite-jdbc-3.36.0.3.jar, thymeleaf-3.0.15.RELEASE.jar, thymeleaf-extras-java8time-3.0.4.RELEASE.jar, thymeleaf-spring5-3.0.15.RELEASE.jar, tomcat-embed-core-9.0.68.jar, tomcat-embed-el-9.0.68.jar, tomcat-embed-websocket-9.0.68.jar, unbescape-1.1.6.RELEASE.jar define 1 overlapping resource:
[WARNING] - META-INF/MANIFEST.MF
[WARNING] jackson-core-2.13.4.jar, jackson-databind-2.13.4.2.jar, log4j-api-2.17.2.jar, log4j-to-slf4j-2.17.2.jar, tomcat-embed-core-9.0.68.jar, tomcat-embed-el-9.0.68.jar, tomcat-embed-websocket-9.0.68.jar define 1 overlapping resource:
[WARNING] - META-INF/NOTICE
[WARNING] jackson-annotations-2.13.4.jar, jackson-core-2.13.4.jar, jackson-databind-2.13.4.2.jar, jackson-datatype-jsr310-2.13.4.jar, log4j-api-2.17.2.jar, log4j-to-slf4j-2.17.2.jar, tomcat-embed-core-9.0.68.jar, tomcat-embed-el-9.0.68.jar, tomcat-embed-websocket-9.0.68.jar define 1 overlapping resource:
[WARNING] - META-INF/LICENSE
[WARNING] spring-aop-5.3.23.jar, spring-beans-5.3.23.jar, spring-context-5.3.23.jar, spring-webmvc-5.3.23.jar define 3 overlapping resources:
[WARNING] - META-INF/spring.handlers
[WARNING] - META-INF/spring.schemas
[WARNING] - META-INF/spring.tooling
[WARNING] javafx-controls-17-win.jar, javafx-graphics-17-win.jar define 3 overlapping resources:
[WARNING] - META-INF/substrate/config/reflectionconfig-aarch64-android.json
[WARNING] - META-INF/substrate/config/reflectionconfig-arm64-ios.json
[WARNING] - META-INF/substrate/config/resourcebundles
[WARNING] javafx-base-17-win.jar, javafx-controls-17-win.jar, javafx-fxml-17-win.jar, javafx-graphics-17-win.jar define 1 overlapping resource:
[WARNING] - META-INF/substrate/config/reflectionconfig.json
[WARNING] jackson-core-2.13.4.jar, jackson-databind-2.13.4.2.jar, jackson-datatype-jdk8-2.13.4.jar, jackson-datatype-jsr310-2.13.4.jar, jackson-module-parameter-names-2.13.4.jar, log4j-api-2.17.2.jar define 1 overlapping classes:
[WARNING] - META-INF.versions.9.module-info
[WARNING] log4j-api-2.17.2.jar, log4j-to-slf4j-2.17.2.jar define 1 overlapping resource:
[WARNING] - META-INF/DEPENDENCIES
[WARNING] maven-shade-plugin has detected that some files are
[WARNING] present in two or more JARs. When this happens, only one
[WARNING] single version of the file is copied to the uber jar.
[WARNING] Usually this is not harmful and you can skip these warnings,
[WARNING] otherwise try to manually exclude artifacts based on
[WARNING] mvn dependency:tree -Ddetail=true and the above output.
[WARNING] See https://maven.apache.org/plugins/maven-shade-plugin/
[INFO] Attaching shaded artifact.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.584 s
[INFO] Finished at: 2025-11-26T18:00:29+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] echo
<EFBFBD> GUI Swing JAR 鎵撳寘鎴愬姛
[Pipeline] }
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] spring-aop-5.3.23.jar, spring-beans-5.3.23.jar, spring-context-5.3.23.jar, spring-core-5.3.23.jar, spring-expression-5.3.23.jar, spring-jcl-5.3.23.jar, spring-web-5.3.23.jar, spring-webmvc-5.3.23.jar define 2 overlapping resources:
[WARNING] - META-INF/license.txt
[WARNING] - META-INF/notice.txt
[WARNING] spring-web-5.3.23.jar, tomcat-embed-el-9.0.68.jar, tomcat-embed-websocket-9.0.68.jar define 1 overlapping resource:
[WARNING] - META-INF/web-fragment.xml
[WARNING] spring-boot-2.7.5.jar, spring-boot-autoconfigure-2.7.5.jar define 2 overlapping resources:
@ -989,9 +1023,13 @@ The current default is 'false'.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.635 s
[INFO] Finished at: 2025-11-26T13:59:09+08:00
[INFO] Total time: 20.777 s
[INFO] Finished at: 2025-11-26T18:00:29+08:00
[INFO] ------------------------------------------------------------------------
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] echo
✓ CLI JAR 打包æˆ<C3A6>功
[Pipeline] }
@ -1019,7 +1057,6 @@ Warning: SDK processing. This version only understands SDK XML versions up to 3
> Task :android:dataBindingGenBaseClassesDebug
> Task :android:processDebugManifest
> Task :android:javaPreCompileDebug
> Task :android:processDebugManifestForPackage
> Task :android:mergeDebugShaders
> Task :android:compileDebugShaders NO-SOURCE
> Task :android:generateDebugAssets UP-TO-DATE
@ -1030,13 +1067,14 @@ Warning: SDK processing. This version only understands SDK XML versions up to 3
> Task :android:checkDebugDuplicateClasses
> Task :android:mergeDebugNativeLibs
> Task :android:mergeLibDexDebug
> Task :android:validateSigningDebug
> Task :android:writeDebugAppMetadata
> Task :android:stripDebugDebugSymbols
Unable to strip the following libraries, packaging them as they are: libimage_processing_util_jni.so.
> Task :android:validateSigningDebug
> Task :android:writeDebugAppMetadata
> Task :android:writeDebugSigningConfigVersions
> Task :android:processDebugManifestForPackage
> Task :android:processDebugResources
> Task :android:compileDebugKotlin NO-SOURCE
@ -1060,7 +1098,7 @@ You can use '--warning-mode all' to show the individual deprecation warnings and
For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD SUCCESSFUL in 2m 11s
BUILD SUCCESSFUL in 2m 1s
37 actionable tasks: 37 executed
列出 APK 目录:
Çý¶¯Æ÷ E ÖеľíÊÇ ¹éµµ
@ -1068,9 +1106,9 @@ BUILD SUCCESSFUL in 2m 11s
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\android\build\outputs\apk\debug µÄĿ¼
2025/11/26 14:00 15,439,118 SLMS-debug.apk
2025/11/26 18:02 15,439,118 SLMS-debug.apk
1 ¸öÎļþ 15,439,118 ×Ö½Ú
0 个目录 118,310,072,320 可用字节
0 个目录 117,929,836,544 可用字节
�找到 SLMS-debug.apk
âœ?Android APK 打包完æˆ<C3A6>: slms-debug.apk
[Pipeline] echo
@ -1085,14 +1123,83 @@ BUILD SUCCESSFUL in 2m 11s
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (8. 彿¡£åˆ¶å“<C3A5>)
Stage "8. 褰掓。鍒跺搧" skipped due to earlier failure(s)
[Pipeline] getContext
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
========== 褰掓。鏋勫缓鍒跺搧 ==========
[Pipeline] script
[Pipeline] {
[Pipeline] bat
褰撳墠宸ヤ綔鐩<EFBFBD>綍:
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS
鍒楀嚭 target 鐩<>綍:
驱动器 E 中的卷是 归档
卷的序列号是 3E90-E7BD
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\target 的目录
2025/11/26 18:00 37,998,061 smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar
2025/11/26 18:00 37,996,821 smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar
2025/11/26 18:00 107,193 smart-library-management-system-1.0-SNAPSHOT.jar
3 个文件 76,102,075 字节
0 个目录 117,929,795,584 可用字节
鍒楀嚭 android/build/outputs/apk/debug 鐩<>綍:
驱动器 E 中的卷是 归档
卷的序列号是 3E90-E7BD
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\android\build\outputs\apk\debug 的目录
2025/11/26 18:02 15,439,118 SLMS-debug.apk
1 个文件 15,439,118 字节
0 个目录 117,929,791,488 可用字节
[Pipeline] bat
妫€鏌ュ埗鍝佹枃浠?..
[CLI 搴旂敤]
鉁?鏈<>壘鍒?slms-cli.jar
[GUI 搴旂敤 - Swing 鐗堟湰]
鉁?鏈<>壘鍒?slms-gui.jar
鈿狅笍 鏈<>壘鍒?run-gui.bat
鈿狅笍 鏈<>壘鍒?README-GUI.txt
[Web 搴旂敤]
鉁?鏈<>壘鍒?slms-web.war/jar
[Android 搴旂敤]
鉁?鎵惧埌 slms-debug.apk
澶у皬: 15439118 bytes
[鏁版嵁搴撴枃浠禲
鈿狅笍 鏈<>壘鍒?library.db
[Pipeline] echo
寮€濮嬪綊妗埗鍝<EFBFBD>...
[Pipeline] archiveArtifacts
Archiving artifacts
Recording fingerprints
[Pipeline] echo
<EFBFBD> 鍒跺搧褰掓。瀹屾垚
[Pipeline] echo
淇濆瓨鍒跺搧鍒<EFBFBD> stash...
[Pipeline] stash
Stashed 1 file(s)
[Pipeline] echo
<EFBFBD> 鍒跺搧宸蹭繚瀛樺埌 stash
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (9. 推é€<C3A9>头歌)
Stage "9. 鎺ㄩ€佸ご姝<E38194>" skipped due to earlier failure(s)
[Pipeline] getContext
[Pipeline] parallel
[Pipeline] { (Branch: 9.1 推é€<C3A9>æº<C3A6>代ç <C3A7>到 main)
[Pipeline] { (Branch: 9.2 推é€<C3A9>制å“<C3A5>到 release)
@ -1100,18 +1207,111 @@ Stage "9. 推送头歌" skipped due to earlier failure(s)
[Pipeline] { (9.1 推é€<C3A9>æº<C3A6>代ç <C3A7>到 main)
[Pipeline] stage
[Pipeline] { (9.2 推é€<C3A9>制å“<C3A5>到 release)
Stage "9.1 鎺ㄩ€佹簮浠爜鍒<E7889C> main" skipped due to earlier failure(s)
[Pipeline] getContext
[Pipeline] tool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
========== 鎺ㄩ€佹簮浠爜鍒板ご姝<E38194> main 鍒嗘敮 ==========
[Pipeline] script
[Pipeline] {
[Pipeline] echo
========== 鎺ㄩ€佹瀯寤哄埗鍝佸埌澶存瓕 release 鍒嗘敮 ==========
[Pipeline] script
[Pipeline] {
[Pipeline] withCredentials
[Pipeline] echo
鎭㈠<EFBFBD>鍒跺搧浠<EFBFBD> stash...
Masking supported pattern matches of %EDUCODER_PASS%
[Pipeline] unstash
[Pipeline] {
[Pipeline] bat
[Pipeline] echo
<EFBFBD> 鍒跺搧宸叉仮澶<E4BBAE>
[Pipeline] withCredentials
Masking supported pattern matches of %EDUCODER_PASS%
[Pipeline] {
[Pipeline] bat
褰撳墠宸ヤ綔鐩<EFBFBD>綍:
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS
澶嶅埗鍒跺搧鍒?artifacts 鐩<>綍...
鈿狅笍 璀﹀憡: 鎵句笉鍒?CLI JAR
鈿狅笍 璀﹀憡: 鎵句笉鍒?GUI JAR
鈿狅笍 璀﹀憡: 鎵句笉鍒?Web WAR/JAR
error: remote educoder already exists.
已复制 1 个文件。
鉁?宸插<E5AEB8>鍒?Android APK
鈿狅笍 璀﹀憡: 鎵句笉鍒?APK 鏂囦欢
已复制 1 个文件。
鉁?宸插<E5AEB8>鍒?library.db (浠庢牴鐩<E789B4>
鈿狅笍 璀﹀憡: 鎵句笉鍒?library.db
鍒跺搧鍒楄〃:
驱动器 E 中的卷是 归档
卷的序列号是 3E90-E7BD
E:\2025-2026\GitAIOps\jenkins\.jenkins\workspace\SLMS\artifacts 的目录
2025/11/26 18:02 <DIR> .
2025/11/26 18:02 <DIR> ..
2025/11/26 11:25 36,864 library.db
2025/11/26 18:02 15,439,118 SLMS-debug.apk
2 个文件 15,475,982 字节
2 个目录 117,884,649,472 可用字节
鍑嗗<EFBFBD> release 鍒嗘敮鍐呭<E98D90>...
鍏嬮殕 release 鍒嗘敮...
release 鍒嗘敮涓嶅瓨鍦<E793A8>紝鍒涘缓鏂板垎鏀?..
Reinitialized existing Git repository in E:/2025-2026/GitAIOps/jenkins/.jenkins/workspace/SLMS/release-repo/.git/
fatal: a branch named 'release' already exists
error: remote origin already exists.
[release 664685c] release: 閺嬪嫬缂撻崚璺烘惂 Build #116
2 files changed, 2 insertions(+), 2 deletions(-)
鎺ㄩ€佸埗鍝佸埌澶存瓕 release 鍒嗘敮...
To https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git
! [remote rejected] HEAD -> main (shallow update not allowed)
error: failed to push some refs to 'https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git'
[Pipeline] }
Stage "9.2 鎺ㄩ€佸埗鍝佸埌 release" skipped due to earlier failure(s)
[Pipeline] getContext
[Pipeline] // withCredentials
[Pipeline] echo
<EFBFBD> 鎺ㄩ€佷唬鐮佸埌 main 澶辫触
[Pipeline] echo
閿欒<EFBFBD>淇℃伅: script returned exit code 1
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] // stage
[Pipeline] }
Failed in branch 9.1 鎺ㄩ€佹簮浠爜鍒<E7889C> main
remote:
remote: Create a new pull request for 'release':
remote: https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab/compare/main...release
remote:
remote: . Processing 1 references
remote: Processed 1 references in total
To https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git
3425ef3..664685c release -> release
鉁?鎺ㄩ€佹垚鍔燂紒
鉁?宸叉竻鐞嗕复鏃剁洰褰?
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
<EFBFBD> 鍒跺搧鎺ㄩ€佸埌 release 鍒嗘敮鎴愬姛
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
Failed in branch 9.2 鎺ㄩ€佸埗鍝佸埌 release
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
@ -1122,9 +1322,9 @@ Failed in branch 9.2 推送制品到 release
[Pipeline] echo
========== æµ<C3A6>水线执行完æˆ<C3A6> ==========
[Pipeline] echo
褰撳墠鏋勫缓缁撴灉: FAILURE
褰撳墠鏋勫缓缁撴灉: UNSTABLE
[Pipeline] echo
褰撳墠鏋勫缓鐘舵€<EFBFBD>: FAILURE
褰撳墠鏋勫缓鐘舵€<EFBFBD>: UNSTABLE
[Pipeline] echo
========== 清ç<E280A6>†æ®ç•™è¿ç¨ ==========
[Pipeline] bat
@ -1145,7 +1345,7 @@ Failed in branch 9.2 推送制品到 release
[Pipeline] echo
========== å<>é€<C3A9>é®ä»¶é€šçŸ¥ ==========
[Pipeline] echo
鍑嗗<EFBFBD>鍙戦€侀偖浠<EFBFBD>: <EFBFBD> SLMS 鏋勫缓澶辫触 - Build #107
鍑嗗<EFBFBD>鍙戦€侀偖浠<EFBFBD>: 鈿狅笍 SLMS 鏋勫缓涓嶇ǔ瀹<C794> - Build #116
[Pipeline] echo
收件人: 602924803@qq.com
[Pipeline] emailext
@ -1153,7 +1353,7 @@ Sending email to: 602924803@qq.com
[Pipeline] echo
✓ é®ä»¶å·²å<C2B2>é€<C3A9>到: 602924803@qq.com
[Pipeline] echo
<EFBFBD><>欢涓婚<E6B693>: <EFBFBD> SLMS 鏋勫缓澶辫触 - Build #107
<EFBFBD><>欢涓婚<E6B693>: 鈿狅笍 SLMS 鏋勫缓涓嶇ǔ瀹<C794> - Build #116
[Pipeline] }
[Pipeline] // script
[Pipeline] }
@ -1167,6 +1367,5 @@ Sending email to: 602924803@qq.com
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 255
[Gitea] do not publish assets due to build being non-Successfully
Finished: FAILURE
Finished: UNSTABLE
Loading…
Cancel
Save