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.
slms/docs/ARTIFACT_NAME_FIX.md

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个字符)

这导致:

  1. 文件路径过长可能触发Windows路径限制
  2. 后续的文件复制和重命名步骤可能失败
  3. 并行打包时的文件操作更容易出错

解决方案

修改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说明文档)

预期效果

构建流程

  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

    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仓库


技术细节

为什么文件名长度很重要?

  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: jarwar

生成的文件名:

  • 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构建