# Gradle大战Maven，胜负已分？

> "I can’t understand why people are frightened of new ideas. I’m frightened of the old ones." — John Cage
> "我不明白为什么人们害怕新想法。 我害怕那些旧的。" - 约翰凯奇。
> 勇敢迈出舒适区，去冒险吧！

Gradle渐渐地火了起来，但是大部分人还在使用Maven，本文将对Gradle和Maven进行全面的比较，大家可以据此作为选型比较的依据。

Maven和Gradle都属于“构建工具”，都是用来自动化工作，并把我们的源码编译成我们要发布的构件而存在。

## 历史
maven初始版本诞生于2004年，Gradle诞生于2008年，Maven诞生时间更早，但二者都拥有悠久的历史，它们都拥有优秀成熟的生态。

- maven初始版本诞生于2004年

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889516553/0RTSm2yRn.png align="left")

- gradle初始版本诞生于2008年

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889538190/mILBILx7G.png align="left")

## 性能
Gradle引入了 Maven中缺少的几个性能优化，以提高构建性能。这也是Spring、Spring Boot源码使用Gradle替换Maven的主要原因。

Gradle 构建缓存在本地重用Gradle任务的输出，并在机器之间共享任务输出。 在许多情况下，这将加快平均构建时间。

构建缓存在分支之间切换时也非常有用，因为先前构建的输出被保留并且不必重新创建。 性能节省与上面的缓存构建相当，在测试项目中，Gradle 比 Maven 快 17 到 100 倍。

在小型的多项目编译中，Gradle 在干净构建下速度快 2-3 倍，增量更改速度快 7 倍，缓存 Gradle任务输出时速度快 14 倍。

![2e942c75f89847aca3c10ace939fe4f8.gif](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889698954/bExSkrm6W.gif align="left")

在中型的多项目编译中，Gradle 在干净构建下速度快4-5 倍，增量更改速度快 40 倍，缓存 Gradle任务输出时速度快 13 倍。

在大型大型单体式项目中，Gradle在干净构建下速度快 2-3 倍，增量更改速度快 7 倍，缓存Gradle任务输出时速度快 3 倍。

## 代码
Maven使用的是基于xml的pom.xml，Gradle使用基于Groovy语言的build.gradle。我们比较一下两个相同功能的Spring Boot程序，分别使用Maven和Gradle的区别。

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889752059/UgKVyhZ9Q.png align="left")

由图可以看出，相同情况下，build.gradle是33行代码，pom.xml是69行代码。当然这主要的原因是xml本身就是一门很啰嗦的表意语言。也因此，用xml作为配置、协议也越来越少。

由图也可以看出Gradle比Maven易读性更强且更易维护！

## 功能

从表中可以看出，Gradle的功能是比Maven要更丰富的。

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889965380/m5ka6plwa.png align="left")

## 流行度
从各类统计数据来看，Maven使用的流行度、市场占有率是有绝对的领先优势的。但是这也不能说明太多的问题，当年的ie、xp系统、诺基亚手机也都是市场的霸主。

个别的统计有显示Gradle有领先的结果，但这不能说明Gradle真正领先。如由OpenLogic发布的《2022年度开源报告显示》：

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889866540/QjDEqW10e.png align="left")
结论
由上述比较，我们发现Gradle有明显于Maven的优势。我提出下面的建议：

1、新项目尝试使用Gradle来构建！

2、尝试迁移Maven的老项目将其使用Gradle构建。（如：Spring/Spring Boot编译工具从Maven迁移到了Gradle）

不愿迁移的理由很多：

1、对于Maven很熟悉了，不用迁移到新的工具！

2、又要学习一个新东西，卷不动了！

我觉得无论作为什么样的职业，对新的东西要保持敏锐的感知和学习，不要停留在自己舒适的区域，无论Gradle有没有那么优秀，或者有没有那么多问题，我们要坚持尝试一下。

最后送给大家一句话：

"I can’t understand why people are frightened of new ideas. I’m frightened of the old ones." — John Cage
"我不明白为什么人们害怕新想法。 我害怕那些旧的。" - 约翰凯奇。

勇敢迈出舒适区，去冒险吧！


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658889892621/QRFOYv151.png align="left")

