You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.4 KiB
6.4 KiB
制品文件名修复报告
修复日期: 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个字符)
这导致:
- 文件路径过长可能触发Windows路径限制
- 后续的文件复制和重命名步骤可能失败
- 并行打包时的文件操作更容易出错
解决方案
修改1: 更新pom.xml中的artifactId
文件: pom.xml
修改前:
<groupId>com.smartlibrary</groupId>
<artifactId>smart-library-management-system</artifactId>
<version>1.0-SNAPSHOT</version>
修改后:
<groupId>com.smartlibrary</groupId>
<artifactId>slms</artifactId>
<version>1.0-SNAPSHOT</version>
修改2: 更新Jenkinsfile中的文件名引用
文件: Jenkinsfile
CLI打包阶段
修改前:
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
修改后:
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打包阶段
修改前:
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
修改后:
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打包阶段
修改前:
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
修改后:
if exist target\\slms-1.0-SNAPSHOT.war (
copy /Y target\\slms-1.0-SNAPSHOT.war target\\slms-web.war
修改3: 更新发布仓库地址
文件: Jenkinsfile
修改前:
git clone --branch release https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git release-repo
修改后:
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说明文档)
预期效果
构建流程
- ✅ Maven编译成功
- ✅ 单元测试通过
- ✅ SonarQube质检通过
- ✅ 四端并行打包成功
- ✅ CLI JAR生成并重命名
- ✅ GUI JAR生成并重命名
- ✅ Web WAR生成并重命名
- ✅ Android APK生成
- ✅ 制品归档成功(所有文件)
- ✅ 推送到头歌main分支成功
- ✅ 推送到slms仓库release分支成功
制品分发
- Jenkins归档: 所有制品可从Jenkins下载
- slms仓库main分支: 源代码推送到slms.git
- slms仓库release分支: 所有制品推送到slms.git
验证步骤
-
提交修改到Gitea
git add pom.xml Jenkinsfile git commit -m "fix: Shorten artifact names from smart-library-management-system to slms" git push origin main -
触发Jenkins构建
- 访问Jenkins
- 点击"立即构建"
- 观察构建日志
-
验证制品生成
- 检查构建日志中的文件列表
- 确认所有slms-.jar和slms-.war文件都存在
- 确认文件大小合理
-
验证制品归档
- 在Jenkins构建页面点击"Artifacts"
- 确认可以看到所有7个文件
- 尝试下载并测试
-
验证slms仓库
- 访问https://bdgit.educoder.net/pu6zrsfoy/slms.git
- 检查main分支包含最新源代码
- 切换到release分支
- 确认artifacts目录包含所有制品
技术细节
为什么文件名长度很重要?
-
Windows路径限制
- Windows传统路径限制为260个字符
- 虽然现代Windows支持长路径,但需要特殊配置
- Jenkins可能运行在未启用长路径支持的环境
-
并行打包的文件操作
- 并行任务同时操作target目录
- 长文件名增加了文件系统操作的复杂度
- 短文件名减少了潜在的冲突
-
可读性和维护性
- 短文件名更容易在日志中识别
- 减少了脚本中的字符串长度
- 降低了拼写错误的风险
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.jarslms-1.0-SNAPSHOT-gui-swing.jarslms-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构建