构建工具与协作局部实验(U62)
公开入口,仓库根目录,JDK 21 / Maven 3.9.9 / Gradle 9.8.2 / git;不依赖任何外部服务:
python3 labs/build-toolchain/run.py脚本把工程复制到临时目录执行,结束删除临时树,只保留日志(~/.cache/software-engineering-study/java-depth-impl/u62/)。Gradle 发行版与用户 home 位于仓库外缓存目录(首次运行需要 ~/.cache/software-engineering-study/tools/gradle-9.8.2;缺失时 Gradle 部分跳过并如实标注)。
教材:构建工具与协作。Boot 打包见Spring Boot 启动,AOT/Native 见AOT/Native/CRaC,测试分层与交付门禁归 U63。
公开工程:父 POM、BOM 模块(platform/pom.xml)、旧版依赖模块、库模块、应用模块与 enforcer 门禁、主类、版本测试、Gradle 对照工程 gradle-project/(settings.gradle.kts、build.gradle.kts、lib/build.gradle.kts、app/build.gradle.kts)、runner、运行证据。
| 场景 | 真实命令 | 实际观察 |
|---|---|---|
| BOM 管理 | mvn dependency:tree -pl app | jackson 2.21.7 |
| 无 BOM 对照 | 移除 dependencyManagement 与 platform import | 最近优先选中 legacy 的 2.17.1 |
| 直接声明 | app 直接写 2.17.1 | 直接声明压过传递依赖 |
| 插件门禁 | mvn -pl app validate -Djackson.version=2.17.1 | enforcer BannedDependencies 在 validate 阶段 exit 1,修复后 exit 0 |
| 可重复构建 | 两次 clean package | 固定 outputTimestamp 时 SHA-256 一致;去掉后(跨 2 秒时间片)不一致 |
| 真实运行 | java -cp … study.build.app.AppMain | classpath 中 jackson 2.21.7,输出 JSON |
| Gradle 对照 | gradle :app:dependencies / :app:jar | platform BOM 生效;冲突调解取最高版本 2.17.1 → 2.21.7;两次 jar 哈希一致 |
| Git 协作 | 临时仓库的 merge/rebase | 真实冲突 exit 1、解决后合并、rebase + --ff-only、工作区干净 |
本机环境(一次运行的实际值)
BellSoft Liberica JDK 21.0.11+11-LTS、Apache Maven 3.9.9(Resolver 1.9.22)、Gradle 9.8.2、git 2.55.0、macOS 27.2 arm64。实际版本、退出码、观察行与文件 SHA-256 见 evidence/u62-*.json。
边界
- 企业制品库(Nexus/Artifactory)、
mvn deploy、Maven Central 发布、GPG 签名未运行。 - CI 平台、依赖漏洞扫描、license 合规、SBOM 未运行。
- 可重复构建只验证同一机器同一 JDK 的两次构建;跨 JDK/跨 OS/跨 Maven 版本未运行。
- Gradle 仅做最小对照(平台 BOM、冲突调解、可重复 jar、测试),不覆盖 configuration cache、build cache、version catalog 与插件开发。
- Git 只验证本机临时仓库的合并/rebase/状态检查;远程托管、保护分支、签名提交未运行。
- 只使用 127.0.0.1 与本地临时目录、合成模块;不下载任何私有依赖,不修改本仓库 pom 与 Git 状态。
已知未运行
制品库与发布流程、CI 平台、漏洞/license/SBOM、跨环境可重复构建、Gradle 高级特性、Git 远程协作均未运行;对应结论在正文与账本中按机制推演或明确未运行标注。