Gradle探索之旅(一)——What is Gradle?

 

目录

 

什么是Gradle?

为什么使用Gradle

Gradle的重要特性

MAVEN VS Gradle

参考:


什么是Gradle?

Gradle是一款开源的自动化构建工具,设计的目标是可用其构建任意类型的软件项目。

那么自动化构建工具又是什么?这里让我们回忆一下,当使用C/C++,Java,Kotlin等编程语言编写完业务逻辑后,需要将源代码编译(compile),链接(link)和打包(package)成可执行程序(exe,apk,war等)或可重用的库(lib,dll,.a,so,jar等)供用户使用,我们把从源代码到可执行应用或库的这一整个过程称为构建,把能够自动完成构建流程的应用称为自动化构建工具。在软件项目开发初期,代码结构简单,编译构建的过程相对容易,按照顺序手工执行相应的命令即可。但随着业务需求不断迭代,代码结构越来越复杂,为了代码复用和解耦往往会提取公用逻辑,独立出单独的模块,同时随着模块的增加,模块与模块之间的依赖就必须加以管理。模块的版本管理,也让代码编译构建颇费脑筋。这时一款稳健高效的自动化构建工具就显得尤为重要,通过简单的配置就能够正确的输出最终的产物。

说简单点,自动化构建工具实际上就是将开发者日常需要执行的以下操作自动化:

  1. 下载并管理依赖
  2. 编译源代码为二进制目标文件(C/C++)或字节码文件(Java/Kotlin)
  3. 打包目标文件或字节码文件为可执行程序或库文件
  4. 单元测试,部署

为什么使用Gradle

熟悉Java构建的小伙伴都知道Java构建经历了几代构建工具的更迭,从早期手工构建到ANT,从ANT再到MAVEN;Gradle也是站在巨人的肩膀上,他汲取了ANT和MAVEN的优点,并显著提高了灵活性和性能。

除了工具本身的提升之外,另一个选择Gradle的重要原因是Google选择了Gradle,Google在自家的安卓集成开发工具 Android studio中,将构建过程完全委托给了Gradle。Why?我们看看Google在2015年发布的一份Android的构建流程图:

如果对Android的构建并不熟悉,看了这张图,你大概会被吓到。流程过于复杂,如果每次生成apk都需要手工去执行相应的命令,工作量大且非常容易出错。而且有些构建环节的输入参数需要在执行过程中动态修改,这时通过手工往往无法完成。而Gradle将这一切安排的井然有序。

了解了什么是Gradle以及为什么需要使用Gradle之后,我们来看看gradle具有哪些重要特性,以及与MAVEN的几点主要区别。

Gradle的重要特性

  • 1. 高性能

Gradle通过Task来完成构建工作,Task后面章节会详细说明,这里我们可以简单的理解它是一项封装了构建流程的任务。Gradle通过执行多个有序的任务来完成构建,构建过程中,Gradle可以仅仅执行那些输入输出发生变化的Task。你也可以使用build cache来复用Task的输出,这些输出可能来自于上一次执行或者一台不同的设备。当然还有很多可用优化的选项(后续章节会说明),通过这些手段,大大提高了构建效率。

  • 2. 基于JVM

Gradle运行在JVM环境之上,所以必须安装JDK环境,对于熟悉JVM环境的小伙伴来说,你可以使用Java API来编写构建逻辑,例如自定义Task类型和plugins。JVM的移植性也使得Gradle可以轻易实现跨平台。但Gradle并不局限于构建JVM工程,它也能够构建Native工程,例如C++。

  • 3. 约定

约定(Conversion),简单理解就是对很多常用的设置给定一个默认值,例如文件路径默认为src/main/java。通过应用合适的plugins(Gradle的实际构建功能都是由plugins提供的,例如java plugin提供了编译打包java的功能,而android plugin则提供了编译打包android的功能),你只需要编写简短的脚本就能完成很多项目的构建。如果你不想使用这些默认值,Gradle允许你重写它们,增加你自己的Task,基于现有的约定增加自己的定制构建。

  • 4. 可扩展性

你可以扩展Gradle,例如新建新的Task类型,甚至是构建模型(build model),例如Android构建,它增加了很多构建的新名词,例如flavors,build types,等等。

  • 5. 支持多款IDE

很多主流的IDE都支持导入Gradle构建的工程。例如:Android Studio,IDEA等等。

  • 6. Insight

Gradle的构建扫描功能提供了非常丰富的提示信息,用于在构建过程中帮你找出存在的问题。这些信息可以帮助你改善构建性能,排查问题。

MAVEN VS Gradle

MAVEN自2004年以来,一直是Java构建的标准,直到现在仍然有大量优秀的源代码使用Maven构建。我们通过以下几点比较看看两者的区别:

  • 1. MAVEN使用XML,Gradle使用Groovy

MAVEN使用XML,XML虽然格式严谨但缺乏灵活性。Gradle使用基于Groovy的DSL来进行配置,Groovy本身是一门脚本语言,有很强的灵活性,Gradle甚至可以扩展DSL,来实现自定义配置。

  • 2. MAVEN配置繁杂,Gradle约定大于配置

Gradle对项目目录等设置给出了非常合理的默认值,我们可以直接按照约定操作,因此配置脚本非常简洁易读。如果需要手动配置,可以在配置脚本中单独配置,优点是配置脚本中的自定义配置一目了然。

  • 3. 性能比较

    如果想了解详细的统计数据请参考官方文档,这里仅仅引用了小型和大型多项目构建的两项统计图表:

小型多项目工程,每个工程有10个子项目,每个子项目有50个源文件。清理(clean)大概比maven快2-3倍。增量构建(incr compile)大概快7倍,当开启缓存的情况下,快了近14倍。

小型多项目工程,每个工程有500个子项目,每个子项目有100个源文件。Clean(清理)大概比maven快3-10倍。增量构建(incr compile)大概快85倍,当开启缓存的情况下,快了近13倍。

Gradle在性能上的优势非常明显。

综上所述,配置简洁性和灵活性,Gradle更胜一筹。

看到这里,你还在犹豫是否需要学习Gradle吗?Let's go ahead.

 

参考:

https://docs.gradle.org/current/userguide/userguide.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值