Maven vs. Gradle 比较


Gradle 虽然带来了 Maven 集成、包装器和守护进程的新想法。但是Gradle极端的灵活性带来了认知负担。

Reddit网友:
1、大约 5 年前,我创建了两个项目。一种使用 Maven,一种使用 Gradle。两人都完成了工作。借助 Gradle 的灵活性,我可以做一些疯狂的事情,例如动态包含/排除 jar 中的包。但其他团队成员发现很难跟上。以后新项目我将选择Maven。

2、除了在我看来极端的灵活性可能是有害的之外,gradle 还遭受太多且繁琐的 api 更改。
不过,自 Gradle 7.x 以来,这一点得到了改善。从 4.x 到 7.x 有相当多的重大变化。但从 7.x 开始,这样的情况就不多了。事实上,对于我的构建,我还没有任何东西,并且能够将包含插件的项目移至 8.x,无需任何更改。

3、我的公司不久前聘请了一位新的技术主管,他大力推动 Gralde + Kotlin,而不是 Maven + Java。
现在,我们的新项目是一堆自定义 gradle 构建文件和极其复杂的代码。

4、我喜欢 Gradle 使简单的构建变得非常容易。通常build.gradle比pom.xml短很多,看起来完全是声明性的(尽管技术上并非如此),并且比 XML 更容易看懂。
多年前,当我们决定从 Ant 直接迁移到 Gradle 时,这对我们许多开发人员来说是一个主要卖点。
同时,由于我对开源的贡献,我也掌握了 Maven,但我处于一种相当罕见的情况,因为我实际上首先学习了 Gradle (在 maven 之前,但在 Ant 之后)。我认为很多人首先学习了 Maven,但没有看到学习“只是另一个”构建工具的意义。

5、如果首先学习了 Maven,就很难看到 Gradle 的真正价值。
它更加简洁、可读和灵活。这太棒了。
但与我有什么关系?
您只要一次创建 Maven pom ,然后可能会跳转几次以添加库。

如果你不做任何疯狂的事情,它就非常容易使用和理解。

公平地说,Gradle 也是如此,但由于 Gradle 加入聚会太晚了,因此它们通常没有得到平等的评价。

要真正让 Maven 过时​​(Maven 淘汰了 Ant),必须有一些真正的好处, 仅仅凭“它更时尚并且更容易阅读”还不够。即使总体而言,它在大多数方面都是优越的。

6、XML 看起来很过时,而且 .pom 又大又乱。,入门级 Spring Boot gradle 很小并且很容易理解。

7、这里不一定有明显的赢家。如果您正在构建一个典型的 Java 项目,那么 Maven 就可以做到这一点,几乎不需要其他任何东西。但如果你有一个多语言项目,或者一个单一的仓库,或者做一些非常规的事情,maven 会很麻烦。

8、Maven 插件必须与您想要使用该插件的项目分开开发、版本控制和部署,因此您可以创建一个完整的其他项目。
在 Gradle 中,您只需将构建代码放在 buildSrc/ 中即可。
另外,如果您正在做一些非常规的事情,那么在 Maven 生命周期中寻找一个位置来插入您的插件可能会很烦人。

9、喜欢标准化还是灵活性,这是一个见仁见智的问题。两者都有各自的优点和缺点。
 gradle 做得很好但 Maven 完全错过的一件事:增量构建。
这个功能在 Maven 中完全被破坏了,基本上每个人都总是做“clean编译”。

我在工作中为我们的一些项目设置了几个 gitlab 管道,一些使用 Maven,另一些使用 gradle。
通过 gradle 构建,可以可靠地缓存一个阶段的构建输出,并且不必在后续步骤中重复编译。
这对于 Maven 构建完全不起作用,管道中的每一步都会以某种方式再次重新编译整个代码库。