前言: 既然我们已经使用Maven 来完成对项目的构建,为什么还要使用Gradle 进行项目的构建;gradle和maven都可以作为java程序的构建工具,但两者还是有很大的不同之处的:1.可扩展性,gradle比较灵活,maven的灵活性就差一些,但是maven的项目比较容易看懂,并且上手简单。2.性能比较,gradle比maven运行得快。
1 Gradle 介绍:
Gradle是一种构建工具,它可以帮你管理项目中的依赖、编译、打包、部署等。纵观历史,总共出现了三种构建工具,分别是:Ant,Maven,Gradle。Ant属于上古时期,它可以自动化打包,从而解放了人力。Maven属于现代社会,不仅可以自动化打包,相比于Ant,它还能帮你下载Jar包和管理Jar包。但是,Maven的打包逻辑太死板,定制起来太麻烦,不如Ant灵活。这个时候Gradle登场了,它属于后现代社会,既能自动下载和管理Jar包,又能自己写脚本,并且脚本写起来还比Ant还好用。
Ant和Maven都是基于XML的构建工具,而Gradle是用Groovy编写的构建工具,Gradle通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对项目进行构建。Gradle脚本本质上就是Groovy脚本,它充分利用了Groovy的语法糖,例如省略方法参数括号和省略句尾分号等,让代码看起来十分清爽。相对Groovy脚本的灵活强大,Ant和Maven使用XML来做配置,则显得呆板很多。本项目以gradle-7.5.1 为例:
2 配置Gradle 环境变量:
2.1 下载并解压;
Gradle下载地址:
https://services.gradle.org/distributions/gradle-7.5.1-bin.zip
2.2 配置环境变量:
(1) 配置home:
GRADLE_HOME
D:\java\gradle-7.5.1
(2)配置path:
%GRADLE_HOME%\bin
2.3 验证:
命令行输入:
gradle -v
可以看到gradle 的版本:
3 Idea配置 gradle:
Gradle user home 配置仓库的地址:
4 常用的命令:
- assemble 组合项目的输出,在java中多用于生成jar、war包,而在android中用于生成apk
- check 用户项目的检查任务,比如说lint
- connectedCheck 用于连接设备的检查
- build 这种任务会执行assemble与check的任务,输出jar包或者war包
- clean 这个task清空项目的所有输出。
5 Maven 和Gradle 的比较:
- 可扩展性
Google选择gradle作为android的构建工具不是没有理由的,其中一个非常重要的原因就是因为gradle够灵活。一方面是因为gradle使用的是groovy或者kotlin语言作为脚本的编写语言,这样极大的提高了脚本的灵活性,但是其本质上的原因是gradle的基础架构能够支持这种灵活性。
你可以使用gradle来构建native的C/C++程序,甚至扩展到任何语言的构建。相对而言,maven的灵活性就差一些,并且自定义起来也比较麻烦,但是maven的项目比较容易看懂,并且上手简单。
所以如果你的项目没有太多自定义构建需求的话还是推荐使用maven,但是如果有自定义的构建需求,那么还是投入gradle的怀抱吧。 - 性能比较
虽然现在大家的机子性能都比较强劲,好像在做项目构建的时候性能的优势并不是那么的迫切,但是对于大型项目来说,一次构建可能会需要很长的时间,尤其对于自动化构建和CI的环境来说,当然希望这个构建是越快越好。
Gradle和Maven都支持并行的项目构建和依赖解析。但是gradle的三个特点让gradle可以跑的比maven快上一点:
(1)增量构建
gradle为了提升构建的效率,提出了增量构建的概念,为了实现增量构建,gradle将每一个task都分成了三部分,分别是input输入,任务本身和output输出。
(2)构建缓存
gradle可以重用同样input的输出作为缓存,大家可能会有疑问了,这个缓存和增量编译不是一个意思吗?
在同一个机子上是的,但是缓存可以跨机器共享.如果你是在一个CI服务的话,build cache将会非常有用。因为developer的build可以直接从CI服务器上面拉取构建结果,非常的方便。
(3)Gradle守护进程
gradle会开启一个守护进程来和各个build任务进行交互,优点就是不需要每次构建都初始化需要的组件和服务。
同时因为守护进程是一个一直运行的进程,除了可以避免每次JVM启动的开销之外,还可以缓存项目结构,文件,task和其他的信息,从而提升运行速度。
参考:
Gradle用户指南 中文版