跳到正文

ADR-0105:显式 API 基线与签名分发验证 ​

  • 状态:接受
  • 日期:2026-10-28

背景 ​

本地 Maven 坐标可消费不代表二进制兼容、平台 native 可加载、签名有效或正式分发完成。首次真实远端构建暴露 Linux native 校验值缺失,原工作流的 fail-fast 又取消了另一个平台,两个结果不能合并称为通过。

决策 ​

保留由固定提交独立构建的开发期 Java API 基线,以 Java 21 实际 JAR 声明与候选比较。移除/改变公共或受保护声明、常量及新增必需抽象方法默认失败;普通新增项登记,保留旧入口的 record 扩展不因 component 数增加直接拒绝。签名检查与行为、源码重编译、格式和阅读器兼容分别验收,不宣称完整二进制兼容分析器。

CI 使用 Windows、Linux、macOS Java 21,显式选择 native classifier,独立保留每个平台的结果与制品。native 选择逻辑由库测试和 Maven 调用方共享,未知平台/架构明确失败;生产 POM 不自动传递平台二进制。新平台校验值通过实际下载及发布摘要对照审查,不禁用严格依赖验证。

Maven POM 补齐项目、SCM、维护者和许可元数据。发布版本、签名开关和本地仓库位置显式配置,PGP 私钥仅由外部环境提供。签名分发验证使用临时、无正式身份的密钥和固定标记的验证版本,独立 GnuPG 验签并确认篡改拒绝,核对 BOM/SBOM、许可、源码/Javadoc、校验值及独立坐标调用方。最终生成 Central 目录结构 ZIP,整个准备过程没有远程上传。

结果与边界 ​

开发期基线不代表 API 冻结或已发布版本。签名 ZIP、远端 CI、Central 命名空间权限、正式密钥、上传和真实远端消费各是独立状态。GitHub 仓库管理权限不能证明 Central 权限;临时密钥验签不能证明正式身份或用户信任。正式分发仍须提供可核实的目标、版本、命名空间和授权。

实际结果及未执行范围见阶段一百零五。