Skip to content

[BUG][P2] 同步主仓与发布 BOM 的依赖版本,避免 BouncyCastle 和 Tomcat 升级遗漏 #295

Closed

Description

@Aias00

已确认问题

本轮依赖升级更新了根 POM 的 BouncyCastle 和 Tomcat 版本,但独立发布的 argi-bom 未同步。主仓 reactor 与通过 BOM 引入 ARGI 的普通消费者得到不同版本,主仓构建通过不能代表消费者使用了相同的依赖组合。

代码:https://github.com/agentic-ai-java/argi/blob/04c5686fe66b8daaa5d60190effa0cc1f40fdfe9/pom.xml#L109;https://github.com/agentic-ai-java/argi/blob/04c5686fe66b8daaa5d60190effa0cc1f40fdfe9/argi-bom/pom.xml#L74。

依赖族 根 POM argi-bom 无额外覆盖的消费者实际版本
BouncyCastle 1.86 1.85 1.85
Tomcat embed 11.0.27 11.0.26 11.0.26

独立消费者复现

  1. 安装 Core 04c5686fe66b8daaa5d60190effa0cc1f40fdfe9 的当前 BOM。
  2. 在仓库外创建最小 Maven 工程,只在 dependencyManagement import io.github.agentic-ai-java:argi-bom:2.1.0-RC2-SNAPSHOT。
  3. 不指定版本地依赖 org.bouncycastle:bcprov-jdk18on 与 org.apache.tomcat.embed:tomcat-embed-core;不额外继承其他父 POM或覆盖版本。
  4. 执行 Maven effective-pom,读取直接依赖的已解析版本。

实测为 bcprov-jdk18on 1.85、tomcat-embed-core 11.0.26。这里确认的是版本管理漂移和升级未交付给 BOM 消费者,不据此推断具体 CVE、漏洞利用或生产环境故障。

交付与验收

  • 按实际发布决策同步根 POM 与 BOM 的目标版本;如需有意不同,给出明确兼容依据和消费者说明,不能依靠重复属性自然保持一致。
  • 用仓库外、仅导入已生成/安装 BOM 的消费者验证有效版本,不只检查 reactor 或源码中的属性字符串。
  • 覆盖 BouncyCastle 的 bcprov/bcpkix/bcutil,以及受管理的 Tomcat embed core/el/jasper/websocket,避免同一族局部漂移。
  • 建立适当的发布一致性检查,至少能发现本次 root 已升级、BOM 未升级的情况;不强制新增 Maven 模块或依赖服务。
  • 保持消费者明确覆盖版本的能力,说明实际升级影响;依赖升级必须用有意义的构建/回归证据验证,不能以删去 BOM 管理来回避差异。

基线与范围

Core 04c5686fe66b8daaa5d60190effa0cc1f40fdfe9;Extensions 3b08e736be4f195c1e72839d2b0cc395fb14f225。Core 19 模块 clean install 通过,2578 个测试含 173 个跳过;上述最小消费者另外验证了实际 effective-pom。

关联 #185、#180。本单只处理发布依赖管理的一致性,不重复跨仓候选版本选择任务 #229,不要求为形式独立而调整包名或发布坐标。

Activity

  1. konlue commented on Nov 6, 2026

    @konlue
    Contributor

    您好,我想认领 #295。

    现状核对:当前 main 上根 pom 与 argi-bom 的版本漂移已被修复(BouncyCastle 1.86 / Tomcat 11.0.27 两侧一致,五组共享家族逐一核对),本 PR 交付验收标准中防止回归的部分:

    • 新增 tools/scripts/check-bom-consistency.py(纯标准库,无新 Maven 模块):默认模式直接比较根 pom 与 argi-bom 源码里的共享属性(revision / jackson-2 / jackson-3 / bouncycastle / jsoup / tomcat),任一不一致 exit 1 并列出漂移行——日常 CI 每次 build 都跑,不依赖 release 包或 flattened-pom;
    • --verify-consumer 模式:临时生成只 import argi-bom 的仓外 consumer pom,对 BouncyCastle 三件 + Tomcat embed 四件不写版本做 dependency:list,断言 effective 版本 == BOM 声明(保留 consumer 显式覆盖能力,BOM 条目结构不动);
    • 接线:build-and-test.yml 的 check-style job 加 make bom-consistency-check(每次 PR 都跑),build job 在 verify-release-artifacts 之后加 make bom-consumer-verify(install BOM + consumer 级验证)。

    验证:当前 HEAD 全绿(exit 0);人为把 BOM 的 bouncycastle 退回 1.85 → exit 1 且输出 DRIFT bouncycastle.version: root pom has 1.86, argi-bom has 1.85,还原后恢复绿;consumer 验证实跑通过(7 件 effective 版本与 BOM 一致)。跨仓候选版本选择留 #229。

  2. added a commit that references this issue on Nov 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions