写点什么

最新版 gradle 安装使用简介

发布于: 2021 年 02 月 07 日

简介

gradle 的最新版本是 6.7,从 2009 年的第一个版本,到 2020 年的 6.7,已经发展了 11 年了。gradle 是作为 android 的官方构建工具引入的,除了 java,它还能够支持多种语言的构建,所以用途非常广泛。



gradle 是开源的构建工具,你可以使用 groovy 或者 kotlin 来编写 gradle 的脚本,所以说 gradle 是一个非常强大的,高度定制化的和非常快速的构建工具。


根据我的了解,虽然 gradle 非常强大,但是对于 java 程序员来说,一般还是都使用的 maven,或者同时提供 maven 和 gradle 两种构建方式。


为什么会这样呢?个人觉得有两个原因:


第一个原因是 gradle 安装文件和依赖包的网络环境,如果单单依靠国内的网络环境的话,非常难安装完成。


第二个原因就是 gradle 中需要自己编写构建脚本,相对于纯配置的脚本来说,比较复杂。


安装 gradle 和解决 gradle 安装的问题

gradle 需要 java8 的支持,所以,你首先需要安装好 JDK8 或者以上的版本。


❯ java -versionjava version "1.8.0_151"Java(TM) SE Runtime Environment (build 1.8.0_151-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
复制代码

安装 gradle 有两种方式,一种就是最简单的从官网上面下载安装包。然后解压在某个目录,最后将 PATH 指向该目录下的 bin 即可:


❯ mkdir /opt/gradle❯ unzip -d /opt/gradle gradle-6.7-bin.zip❯ ls /opt/gradle/gradle-6.7LICENSE  NOTICE  bin  README  init.d  lib  media
export PATH=$PATH:/opt/gradle/gradle-6.7/bin
复制代码

如果你想使用包管理器,比如 MAC 上面的 brew 来进行管理的话,则可以这样安装:


brew install gradle
复制代码

但是这样安装很有可能在下载 gradle 安装包的时候卡住。


==> Downloading https://services.gradle.org/distributions/gradle-6.4.1-bin.zip##O#- #
复制代码

怎么办呢?


这时候我们需要自行下载 gradle-6.4.1-bin.zip 安装包,然后将其放入 http 服务器中,让这个压缩包可以通过 http 协议来访问。


简单点的做法就是将这个 zip 文件拷贝到 IDEA 中,利用 IDEA 本地服务器的预览功能,获得 zip 的 http 路径,比如:http://localhost:63345/gradle/gradle-6.7-all.zip.


接下来就是最精彩的部分了,我们需要修改 gradle.rb 文件:


brew edit gradle
复制代码

使用上面的命令可以修改 gracle.rb 文件,我们替换掉下面的一段:


  homepage "https://www.gradle.org/"  url "https://services.gradle.org/distributions/gradle-6.7-all.zip"  sha256 "0080de8491f0918e4f529a6db6820fa0b9e818ee2386117f4394f95feb1d5583"
复制代码

url 替换成为 http://localhost:63345/gradle/gradle-6.7-all.zip,而 sha256 可以使用 sha256sum gradle-6.7-all.zip 这个命令来获取。


替换之后,重新执行 brew install gradle 即可安装完成。


安装完毕之后,我们使用 gradle -v 命令可以验证是否安装成功:


gradle -v
Welcome to Gradle 6.7!
复制代码

Gradle 特性

gradle 作为一种新的构建工具,因为它是依赖于 groovy 和 kotlin 脚本的,基于脚本的灵活性,我们通过自定义脚本基本上可以做任何想要的构建工作。


虽然说 gradle 可以做任何构建工作,但是 gradle 现在还是有一定的限制,那就是项目的依赖项目前只支持于 maven 和 Ivy 兼容的存储库以及文件系统。


gradle 通过各种预定义的插件,可以轻松的构建通用类型的项目,并且支持自定义的插件类型。


另外一个非常重要的特性是 gradle 是以任务为基础的,每一个 build 都包含了一系列的 task,这些 task 又有各自的依赖关系,然后这些 task 一起构成了一个有向无环图 Directed Acyclic Graphs (DAGs)。


有了这个 DAG,gradle 就可以决定各个 task 的顺序,并执行他们。


我们看两个 task DAG 的例子,一个是通用的 task,一个是专门的编译 java 的例子:



task 可以依赖 task,我们看个例子:


task hello {    doLast {        println 'Hello world!'    }}task intro {    dependsOn hello    doLast {        println "I'm Gradle"    }}
复制代码

一个 task 可以包含 Actions,inputs 和 Outputs。根据需要这些类型可以自由组合。


标准 task

Gradle 包含了下面 7 种标准的 task:


  • clean :用来删除 build 目录和里面的一切。

  • check:这是一个生命周期任务,通常做一些验证工作,比如执行测试任务等。

  • assemble :这是一个生命周期任务,用来生成可分发的文件,比如 jar 包。

  • build: 也是一个生命周期任务,用来执行测试任务和生成最后的 production 文件。通常我们不在 build 中直接做任何特定的任务操作,它一般是其他任务的组合。

  • buildConfiguration: 组装 configuration 中指定的 archives。

  • uploadConfiguration: 除了执行 buildConfiguration 之外,还会执行上传工作。

  • cleanTask: 删除特定的某个 task 的执行结果。

Build phases

一个 gradle 的 build 包含了三个 phases:


  • Initialization: 初始化阶段。gradle 支持一个或者多个 project 的 build。在初始化阶段,gradle 将会判断到底有哪些 project 将会执行,并且为他们分别创建一个 project 实例。

  • Configuration: 配置阶段。gradle 将会执行 build 脚本,然后分析出要运行的 tasks。

  • Execution: 执行阶段。gradle 将会执行 configuration 阶段分析出来的 tasks。

Gradle Wrapper

上面讲的是 gradle 的手动安装,如果是在多人工作的环境中使用了 gradle,有没有什么办法可以不用手动安装 gradle 就可以自动运行 gradle 程序呢?


方法当然有,那就是 gradle wrapper:



gradle wrapper 是一个工具,通过它我们可以方便的对本地的 gradle 进行管理。


上图列出了 gradle wrapper 的工作流程,第一步是去下载 gradle 的安装文件,第二步是将这个安装文件解压到 gradle 的用户空间,第三步就是使用这个解压出来的 gradle 了。


我们先看下怎么创建 gradle wrapper:


虽然 Gradle wrapper 的作用是帮我们下载和安装 gradle,但是要生成 gradle wrapper 需要使用 gradle 命令才行。也就是说有了 wrapper 你可以按照成功 gradle,有了 gradle 你才可以生成 gradle wrapper。


假如我们已经手动按照好了 gradle,那么可以执行下面的命令来生成 gradle wrapper:


$ gradle wrapper> Task :wrapper
BUILD SUCCESSFUL in 0s1 actionable task: 1 executed
复制代码

先看下生成出来的文件结构:


.├── gradle│   └── wrapper│       ├── gradle-wrapper.jar│       └── gradle-wrapper.properties├── gradlew└── gradlew.bat
复制代码

gradle/wrapper/gradle-wrapper.properties 是 wrapper 的配置文件,我们看下里面的内容:


distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distsdistributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zipzipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/dists
复制代码

其中 distributionUrl 就是我们要下载的 gradle 的路径,其他的配置是 gradle 的安装目录。


一般来说有两种安装文件类型:bin 和 all。bin 和 all 的区别在于,bin 只有安装文件,而 all 还包含了 gradle 的文档和样例代码。


我们可以通过–distribution-type 参数来修改安装文件的类型。此外还有 –gradle-version ,–gradle-distribution-url 和–gradle-distribution-sha256-sum 这几个参数可以使用。


$ gradle wrapper --gradle-version 6.7 --distribution-type all> Task :wrapper
BUILD SUCCESSFUL in 0s1 actionable task: 1 executed
复制代码

除了配置文件之外,我们还有 3 个文件:


  • gradle-wrapper.jar: wrapper 业务逻辑的实现文件。

  • gradlew, gradlew.bat :使用 wrapper 执行 build 的执行文件。也就是说我们可以使用 wrapper 来执行 gradle 的 build 任务。

wrapper 的使用

我们可以这样使用 gradlew,来执行 build:


gradlew.bat build
复制代码

注意,如果你是第一次在项目中执行 build 命令的话,将会自动为你下载和安装 gradle。


wrapper 的升级

如果我们想要升级 gradle 的版本,也很简单:


./gradlew wrapper --gradle-version 6.7
复制代码

或者直接修改 gradle-wrapper.properties 也可以。


一个简单的 build.gradle

我们看一个非常简单的 gradle 的例子:


plugins {    id 'application' }
repositories { jcenter() }
dependencies { testImplementation 'junit:junit:4.13'
implementation 'com.google.guava:guava:29.0-jre' }
application { mainClass = 'demo.App' }
复制代码

上面我们需要安装一个 application plugin,使用的是 jcenter 的依赖仓库,还指定了几个具体的依赖项。最后,指明了我们应用程序的 mainClass。


gradle 使用 maven 仓库

build.gradle 中的 repositories 指明的是使用的仓库选项。


默认情况下 gradle 有自己的本地仓库,一般在~/.gradle 目录下面,如果我们之前用的是 maven 仓库,那么在本地的 maven 仓库中已经存在了很多依赖包了,如何重用呢?


我们可以这样修改 repositories:


    mavenLocal()    mavenCentral()
复制代码

这样的话, 就会优先从 maven 的仓库中查找所需的 jar 包。


总结

本文只是一个很简单的 gradle 介绍,让大家对 gradle 有一个基本的了解,后面我们会详细的介绍 gradle 的各种用法,敬请期待。


本文已收录于 http://www.flydean.com/gradle-kick-off/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!


发布于: 2021 年 02 月 07 日阅读数: 19
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
最新版gradle安装使用简介