JVM 构建工具:让项目模型、JDK 与执行证据保持一致
Maven 和 Gradle 都能下载依赖、运行测试和生成 JAR,但它们组织项目事实的方式不同。Maven 以 POM、继承、profile、生命周期和插件绑定形成 effective model;Gradle 以 settings、project、plugin、configuration 和 task graph 形成执行计划。只比较命令长短,会错过真正影响迁移、缓存和故障定位的模型差异。
三篇文章
| 文章 | 核心对象 | 读完应能回答 |
|---|---|---|
| Maven | Wrapper、POM、生命周期、依赖、插件、多模块、settings、profile | 当前 effective model 从哪里来,哪个阶段和插件生成了产物 |
| Gradle | Wrapper、DSL、project / task、toolchain、daemon、增量与配置缓存 | 配置阶段和执行阶段做了什么,任务为何命中或失效 |
| 选型与迁移 | 项目模型、插件生态、性能、学习和迁移成本 | 什么时候保持现状比换工具更好,迁移失败如何回滚 |
先把 JDK 与 Wrapper 对齐
先确认仓库是否提交 Wrapper,以及 Wrapper 指向的分发来源和校验信息。随后对照:
java -version
./mvnw --version
./gradlew --version仓库只执行实际存在的入口。IDE Runtime、Project JDK、Maven runner JVM、Gradle daemon JVM 和 Java toolchain 是不同位置,不能因为版本号相同就假设路径和供应商一致。
共同证据
Wrapper 脚本、配置和下载来源进入代码审查,不依赖个人全局安装。仓库根、模块图、JDK / toolchain、依赖源、插件源和凭证作用域可解释。冷缓存与热缓存结果一致;缓存只改变耗时,不改变依赖或产物身份。
多模块只构建受影响部分时,仍有完整依赖关系和测试证据。本机和 CI 调用 Wrapper 的同一权威任务,不由 IDE 隐式补充依赖或参数。诊断记录包含 effective POM / settings、依赖树、Gradle properties、task 信息、日志或 build scan / profile 等证据。
先分清客户端构建与仓库服务
Maven settings.xml 和 Gradle 用户级 properties 可以保存源、代理或凭证引用,但仓库不能提交真实 secret。Maven 本地仓库与 Gradle 用户缓存也不是团队制品库;Nexus / Artifactory 的服务端部署和发布治理属于 18。
Spring Boot、Android、Kotlin Multiplatform 等框架和平台插件会继续扩展构建模型。排查时先观察插件怎样进入项目模型、增加哪些任务、改变什么产物;一旦问题来自框架生命周期或平台 SDK,再转到对应开发专题,避免在 Maven 或 Gradle 参数里反复试错。
团队落地检查
Maven 与 Gradle 都有从空项目或最小项目到 test / build / package 的可复制实验和清理路径。依赖解析、插件解析、项目 JDK、toolchain、daemon、缓存和代理失败能分层定位。文章给出多模块、锁定、离线、升级和回滚的判断标准,而不是只贴配置片段。
选型迁移以产物、测试、依赖图和开发入口等价为准,不以构建速度单指标下结论。GUI、远端仓库和商业能力要在代表性终端、账号与网络中复核,保留版本、权限和失败证据。
