云原生—Gradle和Maven性能对比及技术选型

 

目录

一、性能对比

1、Java类库

2、小型多项目构建场景

3、中型多项目构建

4、大型多项目构建

5、大型单体应用

6、性能对比总结

7、Gradle为什么这么快

二、技术选型

1、性能方面

2、可扩展性

Kotiln语言有多灵活

Groovy的优越性


Gradle和Maven都可以作为Java应用程序的构建工具。

在日常工作中,我们通常构建本地项目或远程构建小型项目的时候,由于现在机器配置本身比较高,可能感知不到二者明显的性能差异。

但如果是大中型项目,这种构建效率就能更有体会了。一次构建所花费的时间可能会很长。那在这种情况下,尤其在自动化构建流程中,当然希望构建速度越快越好。特别是企业的一些核心业务系统,比较重视上线时效,可以说效率就是金钱。

我们知道,虽然Gradle和Maven都支持并行构建项目和并行依赖解析。但从Gradle官网给出的5种压测场景的数据来看,Gradle的处理性能确实比Maven快。(实际也确实如此)

官方地址:https://gradle.org/gradle-vs-maven-performance/

一、性能对比

1、Java类库

场景:为了衡量对典型库项目的影响,官方将Apache Commons Lang 3项目从 Maven 转换为 Gradle(使用Java库插件)。

 结论:Gradle在运行测试上快了1.7倍,而在开启cache的时候快了30倍!

2、小型多项目构建场景

场景:以下是 10 个模块的多项目构建的常见任务的结果,类似于微服务的集合。每个子项目有 50 个源文件和 50 个测试源文件。

 结论:Gradle在纯净构建上快2-3倍,而在增量构建上快了7倍,在Gradle任务输出被缓存的情况下可以提升至14倍。

我们来直观感受下二者的构建速度!

3、中型多项目构建

场景:以下是在单个存储库中构建 100 个模块的多项目构建的常见任务的结果。每个子项目有 100 个源文件和 100 个测试文件。

 结论:Gradle 的干净构建速度快 4-5 倍,增量更改速度快 40 倍,缓存 Gradle 任务输出时速度快 13 倍。

4、大型多项目构建

场景:以下是位于单个存储库中的 500 个模块的多项目构建的常见任务的结果。每个子项目有 100 个源文件和 100 个测试文件。

结论:Gradle 的干净构建速度快 3-10 倍,增量更改速度快 85 倍,缓存 Gradle 任务输出时速度快 13 倍。

5、大型单体应用

场景:虽然在一个项目中包含所有代码的情况很少见,但多模块构建的情况很常见,其中大部分代码位于一个或几个比其他模块大得多的模块中。此场景是此类项目的近似值——具有 50000 个源文件和 50000 个测试文件的单个项目。

 结论:Gradle 的干净构建速度快 2-3 倍,增量更改速度快 7 倍,缓存 Gradle 任务输出时速度快 3 倍。

6、性能对比总结

1)在所有场景下,Gradle至少比Maven快2倍。

2)当增量构建时,Gradle比Maven快7-85倍,子项目越多,Gradle快的越多。

3)当Gradle的构建缓存可以解析任务输出的时候,Gradle比Maven快3-30倍。

7、Gradle为什么这么快

1)Gradle实现了大量策略来保证构建速度更快。

包含:增量构建机制、构建缓存机制、守护进程机制。

2)Gradle守护线程可以保证构建信息足够新。

Gradle会开启一个守护进程来和各个build任务进行交互,优点就是不需要每次构建都初始化需要的组件和服务。同时因为守护进程是一个一直运行的进程,除了可以避免每次JVM启动的开销之外,还可以缓存项目结构,文件,task和其他的信息,从而提升运行速度。

3)针对各种类型任务的增量任务输入和输出确保不需要每次运行清理命令。

4)增量编译可以分析源文件和类文件之间的依赖关系,并只重新编译改变的部分;

5)当二进制接口没有改变的时候,Gradle的智能类路径分析器避免了不必要的编译;

6)利用Java类插件来提供更好的建模,减少了编译时类路径的体积,提高了性能。

7)Gradle为了提升构建速度,引入了增量构建机制。gradle把每一个任务分为三部分:输入、任务本身和输出,便于事变变更内容。另外也支持跨机器共享构建缓存,这对于云原生CI中自动构建过程来说体验是想当好了。

二、技术选型

1、性能方面

从上面性能分析来看,Gradle的性能确实完全超越了Maven,各种平台也早已支持Gradle。可以说,除非是兼容老项目,否则完全可以用Gradle来替代Maven。

2、可扩展性

目前移动端操作系统两大阵营:Android和IOS。那其中Android上层就是基于Java开发的,其中选择了Gradle作为Android的构建工具。而Android系统出自大名鼎鼎的Google之手。

那作为互联网行业的巨头,在技术方面一直处于引流世界潮流的状态。那在这种承载一切应用的操作系统技术选型上一定是慎之又慎。

那为什么最终选择了Gradle作为Android的构建工具呢?

其中,除了上面所提到的性能优越外,还有最重要的一个原因就是Gradle具有非常强的灵活性。究其根因,主要是Gradle基础架构能满足这种灵活性。

我们知道,Gradle是一个基于Ant和Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。

Kotiln语言有多灵活

Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。

Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上。例如嵌入式设备或 iOS。

Groovy的优越性

而Groovy,也是一种基于JVM的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。

Gradle目前以面向Java应用为主,当前其支持的语言C++、Groovy、Kotlin、Scala和Swift,计划未来将支持更多的语言。

整体来看,Gradle相比Maven更加灵活。

但Maven的项目相对容易看懂,而且上手会简单一些。虽然,Maven在灵活性和自定义上不是很人性化外,也有它自身的特点,存在即合理。Maven项目相对Gradle而言可读性比较好,另外入门比较容易且支持的插件也比较多。所以,如果项目当中没有自定义需求,则可以选用Maven作为构建工具。

关注下方公众号, 免费领取面试资料!  

Java/JVM/Python/Spring系列/MyBatis/Dubbo/MySQL等技术栈面试题

猜你喜欢

转载自blog.csdn.net/wangyongfei5000/article/details/125924493