# 制品文件名修复报告 **修复日期:** 2025-11-26 **问题:** Jenkins流水线打包成功但制品文件名过长导致后续处理失败 **解决方案:** 将artifactId从`smart-library-management-system`改为`slms` --- ## 问题分析 ### 现象 - Jenkins构建日志显示所有打包都成功(BUILD SUCCESS) - 但归档阶段找不到slms-cli.jar、slms-gui.jar、slms-web.war等文件 - 只有Android APK被成功归档 ### 根本原因 Maven生成的文件名太长: - `smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar` (55个字符) - `smart-library-management-system-1.0-SNAPSHOT-gui-swing.jar` (55个字符) - `smart-library-management-system-1.0-SNAPSHOT.war` (45个字符) 这导致: 1. 文件路径过长可能触发Windows路径限制 2. 后续的文件复制和重命名步骤可能失败 3. 并行打包时的文件操作更容易出错 --- ## 解决方案 ### 修改1: 更新pom.xml中的artifactId **文件:** `pom.xml` **修改前:** ```xml com.smartlibrary smart-library-management-system 1.0-SNAPSHOT ``` **修改后:** ```xml com.smartlibrary slms 1.0-SNAPSHOT ``` ### 修改2: 更新Jenkinsfile中的文件名引用 **文件:** `Jenkinsfile` #### CLI打包阶段 **修改前:** ```groovy if exist target\\smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar ( copy /Y target\\smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar target\\slms-cli.jar ``` **修改后:** ```groovy if exist target\\slms-1.0-SNAPSHOT-cli-shaded.jar ( copy /Y target\\slms-1.0-SNAPSHOT-cli-shaded.jar target\\slms-cli.jar ``` #### GUI打包阶段 **修改前:** ```groovy 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 ``` **修改后:** ```groovy if exist target\\slms-1.0-SNAPSHOT-gui-swing.jar ( copy /Y target\\slms-1.0-SNAPSHOT-gui-swing.jar target\\slms-gui.jar ``` #### Web打包阶段 **修改前:** ```groovy if exist target\\smart-library-management-system-1.0-SNAPSHOT.war ( copy /Y target\\smart-library-management-system-1.0-SNAPSHOT.war target\\slms-web.war ``` **修改后:** ```groovy if exist target\\slms-1.0-SNAPSHOT.war ( copy /Y target\\slms-1.0-SNAPSHOT.war target\\slms-web.war ``` ### 修改3: 更新发布仓库地址 **文件:** `Jenkinsfile` **修改前:** ```groovy git clone --branch release https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git release-repo ``` **修改后:** ```groovy git clone --branch release https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/slms.git release-repo ``` --- ## 修改后的文件名 ### Maven生成的文件 - `slms-1.0-SNAPSHOT-cli-shaded.jar` (33个字符,减少22个字符) - `slms-1.0-SNAPSHOT-gui-swing.jar` (33个字符,减少22个字符) - `slms-1.0-SNAPSHOT.war` (23个字符,减少22个字符) ### 最终归档的文件 - `slms-cli.jar` (CLI应用) - `slms-gui.jar` (GUI应用) - `slms-web.war` (Web应用) - `slms-debug.apk` (Android应用) - `library.db` (数据库文件) - `run-gui.bat` (GUI启动脚本) - `README-GUI.txt` (GUI说明文档) --- ## 预期效果 ### 构建流程 1. ✅ Maven编译成功 2. ✅ 单元测试通过 3. ✅ SonarQube质检通过 4. ✅ 四端并行打包成功 - ✅ CLI JAR生成并重命名 - ✅ GUI JAR生成并重命名 - ✅ Web WAR生成并重命名 - ✅ Android APK生成 5. ✅ 制品归档成功(所有文件) 6. ✅ 推送到头歌main分支成功 7. ✅ 推送到slms仓库release分支成功 ### 制品分发 - **Jenkins归档:** 所有制品可从Jenkins下载 - **slms仓库main分支:** 源代码推送到slms.git - **slms仓库release分支:** 所有制品推送到slms.git --- ## 验证步骤 1. **提交修改到Gitea** ```bash git add pom.xml Jenkinsfile git commit -m "fix: Shorten artifact names from smart-library-management-system to slms" git push origin main ``` 2. **触发Jenkins构建** - 访问Jenkins - 点击"立即构建" - 观察构建日志 3. **验证制品生成** - 检查构建日志中的文件列表 - 确认所有slms-*.jar和slms-*.war文件都存在 - 确认文件大小合理 4. **验证制品归档** - 在Jenkins构建页面点击"Artifacts" - 确认可以看到所有7个文件 - 尝试下载并测试 5. **验证slms仓库** - 访问https://bdgit.educoder.net/pu6zrsfoy/slms.git - 检查main分支包含最新源代码 - 切换到release分支 - 确认artifacts目录包含所有制品 --- ## 技术细节 ### 为什么文件名长度很重要? 1. **Windows路径限制** - Windows传统路径限制为260个字符 - 虽然现代Windows支持长路径,但需要特殊配置 - Jenkins可能运行在未启用长路径支持的环境 2. **并行打包的文件操作** - 并行任务同时操作target目录 - 长文件名增加了文件系统操作的复杂度 - 短文件名减少了潜在的冲突 3. **可读性和维护性** - 短文件名更容易在日志中识别 - 减少了脚本中的字符串长度 - 降低了拼写错误的风险 ### Maven artifactId的影响 Maven使用以下模式生成文件名: ``` ${artifactId}-${version}-${classifier}.${extension} ``` 例如: - artifactId: `slms` - version: `1.0-SNAPSHOT` - classifier: `cli-shaded` (CLI), `gui-swing` (GUI), 无 (Web) - extension: `jar` 或 `war` 生成的文件名: - `slms-1.0-SNAPSHOT-cli-shaded.jar` - `slms-1.0-SNAPSHOT-gui-swing.jar` - `slms-1.0-SNAPSHOT.war` --- ## 相关文档 - `.kiro/specs/gui-jpackage-packaging/requirements.md` - 需求文档 - `.kiro/specs/gui-jpackage-packaging/design.md` - 设计文档 - `.kiro/specs/gui-jpackage-packaging/tasks.md` - 任务列表 --- ## 总结 通过将Maven artifactId从`smart-library-management-system`缩短为`slms`,我们: ✅ **解决了问题:** - 文件名从55个字符减少到33个字符 - 避免了Windows路径长度限制 - 简化了文件操作逻辑 ✅ **改进了流程:** - 更清晰的日志输出 - 更可靠的文件复制 - 更简洁的脚本代码 ✅ **保持了功能:** - 所有打包功能正常 - 并行打包继续工作 - 制品质量不受影响 --- **修复完成时间:** 2025-11-26 **状态:** ✅ 已完成,等待Jenkins验证 **下一步:** 提交代码并触发Jenkins构建