@
xarthur 如果说到 Java 内部嘛,Gradle 版本兼容性简直是灾难。各大版本之间配置升级旧的配置格式会被废弃删除,大版本几乎不兼容,想用 Gradle 6.7 去运行 5 时候创建的真实项目,基本上不修改配置不可能运行。Wrapper 就是为了锁定版本,解决了这个问题,但同时也要额外下载相应的 Dist,我的用户目录光 wrapper 下载的 Gradle Dist 都是超过 20G 了。项目如果使用 Gradle,你几乎要时刻更新到最新的 Gradle 格式,以保证你的代码在别人拿到后,可以使用最近半年的 Gradle 成功的 Build 。
但是 Maven 配置的兼容性堪称优秀。Maven 3 运行 10 几年前 Maven 2 程序一样没问题。虽然将要发布的 Maven 4 ( 3.7 版本计划被废弃了)也可能会加入 Wrapper (但个人觉得完全没必要)。
ANT 在 Maven 大规模使用之前一直是 Java 项目实现自动构建的首选。 虽然 Ant 在新项目中几乎没有多少人会采用,但大量的遗留项目一直还在使用 ANT 。ANT 并不是没进化,ANT 下的子项目 IVY 也是用于依赖管理,与 ANT 结合,一样可以利用 Maven 库,自动解决依赖问题。
SBT 和 Gradle 相似,后台一直跑进程,提供一个交互的编译的环境,只是曲高和寡,几乎只有在 Scala 项目用到(个人我也不喜欢)。
(扯远一点,Ivy 虽然可以读取分析 Maven 坐标,但它自己有一套关于依赖的设计理念,早期 Gradle 也是使用 IVY 解析依赖,后来才切换到使用 Maven 兼容方式的,目前似乎 SBT 还在用默认用 IVY 来解析依赖。)