Gradle安装和配置

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仍不是一款“好用”的构建工具,反而它是我见过最难用的构建工具没有之一。主要缺点包括:

  1. 学习成本极高,使用Gradle需要先了解相对小众的Groovy语言,否则会迷失在极度灵活的脚本中,陷入“怎么写都能编译,怎么运行都报错”的窘境!
  2. 兼容性极差,版本升级经常做出非向下兼容的修改,不仅要不断按最新标准修改工程构建脚本,还要认真检查JDK、IDE工具、Gradle之间的版本是否兼容。这样导致自己写的工程过几个月可能就无法编译了,从Github导入一个工程想直接运行基本不可能,报错也经常是莫名其妙!
  3. 无穷无尽的Gradle Wrapper,Gradle由于极差的兼容性而使用Wrapper方式运行,而这种方式会下载一个工程对应版本的Gradle,用不了多久你的~/.gradle/wrapper目录下就会存在N多个不同版本的Gradle程序!
  4. 占用大量资源,Gradle的守护进程模式从架构上看固然是个好设计,然而实际用起来初次启动速度较慢,运行起来极耗内存!
  5. 同样都是缓存在本地的Jar包,Gradle支持引入Maven本地仓库,却又故意独树一帜的设计了一个不兼容Maven本地仓库格式的“缓存”路径,如果你开发中有时用Maven有时用Gradle,你就不得不维护两个内容相同但格式不同的庞大文件夹!
  6. 过度设计,Gradle的口号居然是“Build Anything”,从第一步就在错误的方向上越走越远,真正需要去做Build Anything的是持续集成系统的流水线,而不是也不能是一个小小的构建工具!

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有时会因为缓存莫名其妙报错,如果有必要我们可以将cacheswrapper路径删除。

GradleWrapper:Wrapper顾名思义是Gradle包装程序,它可以自动下载工程构建所需对应版本的Gradle程序并用于构建。相比直接使用本机安装的Gradle,一定程度上能够避免版本兼容问题。

Maven仓库配置

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路径。

Gradle工程结构

我们可以使用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构建。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap