Gradle是Java开发中比较流行的一款项目自动化构建工具,相比Ant、Maven这两款比较古早的工具,Gradle从中结合吸收了很多优点。如类似Ant的灵活构建配置,类似Maven的依赖管理方式,除此之外,Gradle抛弃了冗长的XML,而使用基于GroovyDSL的灵活配置,能够大大减少配置文件的行数。
官方网站:https://gradle.org/
Ant相对老旧,除非是历史遗留项目,目前已经极少使用了,Maven则仍是JavaEE方向构建工具的事实标准,Gradle由于诸多缺点不推荐在企业级应用构建中使用。Gradle适用于非JavaEE项目,例如自己写的一些工具、软件、开源库等,这类工程可能需要灵活的非标准构建流程,使用Maven可能难以实现,此时Gradle可以发挥其作用。Android开发中,Gradle就是Google指定的唯一选择,无论你是否喜欢。
当然,Gradle仍不是一款“好用”的构建工具,反而它是我见过最难用的构建工具没有之一。主要缺点包括:
~/.gradle/wrapper
目录下就会存在N多个不同版本的Gradle程序!我们在官方网站下载页面可以找到对应的安装包,我这里使用的是7.4.2
版本。
其中binary-only
代表只包含编译好的可执行程序,complete
则包含源码、文档等,因此体积较大,我们下载前者即可。
下载安装包后解压,新建环境变量GRADLE_HOME
指向其文件夹,此外还需要在PATH
中增加bin
目录路径。配置完成后,可以使用gradle -v
检查是否安装成功。
Gradle相关的配置脚本、缓存数据等,默认会存储在~/.gradle
文件夹下。
|_caches 下载的Jar包等缓存目录
|_daemon GradleDaemon的日志等数据
|_init.d 全局的初始化脚本,我们可以在其中自定义脚本内容
|_wrapper Wrapper模式运行,下载的不同版本的Gradle程序
|_gradle.properties Gradle全局配置文件
Gradle有时会因为缓存莫名其妙报错,如果有必要我们可以将caches
、wrapper
路径删除。
GradleWrapper:Wrapper顾名思义是Gradle包装程序,它可以自动下载工程构建所需对应版本的Gradle程序并用于构建。相比直接使用本机安装的Gradle,一定程度上能够避免版本兼容问题。
Gradle依赖会从Maven仓库下载,且支持Maven远程仓库和Maven本地仓库。如果已经使用过很长一段时间的Maven,指定Gradle从Maven本地仓库下载数据能够极大减少Gradle的下载时间;此外由于Maven的远程仓库默认为Maven Central,速度可能较慢,我们可以配置阿里云远程仓库。
在~/.gradle/init.d
下新建初始化脚本repository.gradle
(可以任意命名)并配置如下内容。
allprojects {
repositories {
mavenLocal()
maven { name "aliyun"; url "https://maven.aliyun.com/repository/public" }
mavenCentral()
}
}
这里我们指定了按照Maven本地仓库、阿里云远程仓库、MavenCentral仓库的顺序下载依赖。其中,mavenLocal()
默认会采用~/.m2/repository
路径。
我们可以使用IDE来创建工程也可以直接新建目录并创建必要的文件,Gradle命令行工具也提供了一个创建工程的交互式工具,我们可以执行如下命令创建工程。
gradle init
生成的Java工程目录结构如下。
|_.gradle # 工程缓存数据
|_gradle
|_wrapper # 下载Wrapper程序的可执行Jar和配置文件等
|_app # Gradle模块(即使是单模块工程也会创建一个默认的app模块)
|_src
|_main
|_java
|_resources
|_test
|_build.gradle # 当前模块的Gradle构建脚本
|_gradlew # GradleWapper模式运行的脚本
|_gradlew.bat # GradleWapper模式运行的脚本(Windows)
|_settings.gradle # 工程配置
Gradle工程的目录结构和Maven比较类似,只是配置文件不同,这里要注意的是.gradle
文件夹是缓存信息,不要提交到版本控制系统;而gradle
文件夹因为包含Wrapper配置,需要提交到版本控制系统,否则其他人拿到工程无法得知该工程需要使用哪个版本的Gradle构建。