利益相关:Gradle developer,在core team工作了大概一年半。
首先Gradle在中国地区已经开启了CDN,下载从此不再是问题。
这是一张我们内部报告中,2019年11月GitHub上的公开仓库中构建工具的对比。必须指出,这并不意味着Gradle超过了Maven,因为还有相当一部分仓库是Android项目,这部分仓库只能使用Gradle。所以在Java后端领域,Maven还是占优的。
我自己的观点是:
我们有Gradle和Maven的企业业务,因此二者都用的很多,也很深,包括我在内,我们都给Maven提了很多PR。之前给人上课的时候总结过二者的一些抛开情绪化的优缺点:
Maven的优点:
稳定可靠,通过统一(甚至略显死板)的流程来完成工作,在绝大多数项目上工作良好。社区很大(几乎所有的Java开发者),插件很多很丰富。这其实是构建最大的意义所在,不要什么魔法,老老实实干活就好。
Maven的缺点:
XML的冗长和啰嗦不算是一个特别大的问题,因为现代IDE,哪怕是Notepad++都支持的很好,更别提还有XSD了。Maven真正的缺点在于它太死板了,以至于哪怕要偏离主线一点点,都要付出巨大的代价(比如稍微tweak一下某个流程,或者根据环境做一点点小变动)。因此,很多著名的开源仓库食用Maven的方式是搭配一个脚本,然后用exec插件去完成更灵活的工作。行不行?没问题。但是如果你要用更Maven的方式解决问题,就只能写插件了。
Maven团队是一个非常松散的、社区驱动的团队,对新功能的兴趣不大。这其实——不算是一个缺点,毕竟,写代码就会出bug,不出bug的唯一方式就是不写新功能,只修bug,肯定越来越稳定。当然,Maven几乎把所有工作都放在了插件里也是一个重要原因。
Maven的一个很容易被人忽视的问题说:对于大项目,Maven太慢了。我说的大项目指的是那种要跑上几个小时的项目,Maven原生的up-to-date检查只看时间戳,实践中大家都习惯clean package,所以每次构建基本上都是全量构建。之前帮南方某银行看过一个Maven构建,5000个单元测试要跑一个多小时,我非常诧异,怎么会这么慢?对方说:我们全用powermock……我们的企业版就是帮助这些Maven项目优化——所以如果Maven这个缺点没了,我们就没业务了。
Gradle的优点:
其实是脚本语言的优点,足够灵活,但是这个灵活是不是优点呢……不同的人看法相差很大,自由不是免费的,你接受了自由,就要付出代价。
Gradle的缺点:
技术选型从来不是“谁比谁好”的问题,而是综合团队现状进行的综合决策。我的团队里绝大多数人都是老年人,用Maven溜的一逼,那就Maven;我的团队里多数都是有技术热情的新人,学啥不是学,那就可以尝试Gradle;诸如此类。现阶段,我想不到哪个需求一定要Gradle或者一定要Maven才能完成。
2020年6月,Spring Boot团队宣布将他们的build迁移到了Gradle:
克劳备忘录也好,凯南电报也好,有两大共同点。首先,都是以现实主义的眼光去分析双方的关系。然后,给出的建议都是阳谋,并不是什么不可告人的阴谋,执行起来需要的不是鸡鸣狗盗的小聪明,而是惊人的意志力。
而美国现在战略界现实主义被边缘化,我推测,布热津斯基,基辛格那帮人应该写过不少。不过没所谓,美国能执行大战略的时代过去了。现在这一代精英上半年能管下半年就已经很了不起了。一个需要两代人以上持之以恒去完成的大战略,搞出来他们也执行不了。
冷战时期,从杜鲁门艾森豪威尔到肯尼迪尼克松,最后到李根老布什,个人性格和政治偏好差距不要太大,但是都忠实地完成了他们历史任务,沿着围堵政策做下去。这种战略定力和延续性,世间少见。在中国领导集团上能看见一些相似的东西,但是我们离得距离太近,反而看不清。但在美国精英层身上完全看不到这一点。
个人愚见。