众所周知,在软件开发中,我们无论使用何种工具、库和软件,首先要做的事情就是先将所需的工具下载到本地,然后可能还需要进行一些基本的配置才能够正常使用。比如说,使用Maven进行项目构建,那首先就需要到http://maven.apache.org网站上将Maven二进制包下载下来、解压缩,并配置好相应的M2_HOME、path环境变量等一些信息,接下来才可以使用Maven进行常规的项目构建工作。
对于Gradle来说,情形与Maven相似;同样需要先到https://www.gradle.org网站上先将Gradle二进制压缩包下载到本地,然后解压缩,再配置相应的环境变量,方可执行正常的项目构建工作。不过,除此之外,Gradle还提供了另外一种对于使用者更加友好的方式,使得使用者在将项目拉取到本地后,无需手工下载任何Gradle压缩包,只需通过一条简单的命令即可自动完成所需工具包的下载、配置与管理工作,同时还能够确保所下载的Gradle包的版本与项目所需的Gradle版本完全一致,规避了因软件版本的不同而导致的构建可能失败的结果。这种方式即是本文所要介绍的gradlew,即Gradle Wrapper。
Gradle Wrapper是通过一个命令来完成这一切的工作。实际上,这个命令在*nix系统上就是一个shell脚本,在Windows系统上则是一个批处理文件bat。接下来,我们就来看看gradlew是如何配置与工作的。
首先,使用IntelliJ IDEA建立一个Gradle工程(实际上,在新建Gradle工程时,IDEA就已经为我们提供了gradle wrapper的选项,不过这里我们暂时先不使用),这里我使用的Gradle版本是3.5,如下是新建项目的截图:
新建项目的build.gradle内容如下所示(增加了targetCompatibility = 1.8 一行):
接下来,进入到项目根目录gradlew-demo,输入如下命令:
gradle wrapper
再来看看项目文件,你会发现项目中增加了一个gradlew、一个gradlew.bat,以及一个gradle目录,具体如下图所示:
实际上,到此为止,gradle wrapper的基本使用就告一段落了,这里使用的都是默认的配置。
下面来说说生成的各个文件的含义:
实际上,当生成好了上面的这些目录与文件后,用户就可以将工程push到远程,由其他用户clone下来后即可进行项目的构建,非常方便,省却了用户单独下载Gradle的时间,并且可以确保Gradle版本的完全正确。
上面在执行gradle wrapper命令时并没有添加任何参数,所以生成的gradle-wrapper.properties文件的各个属性都是默认的,默认规则如下所示:
gradlew所指定的Gradle版本与使用gradle wrapper命令时所用的Gradle版本一致,如果想要使用其他版本,那么可以在gradle wrapper命令后添加参数:–gradle-version,比如说:
gradle wrapper –gradle-version 3.4
表示gradlew所使用的Gradle版本为3.4,而非使用gradle wrapper时所用的3.5。
–gradle-distribution-url
表示gradlew所使用的Gradle包会从该配置所指定的网络位置处下载(比如说内网地址),而非Gradle官网地址。
–distribution-type
表示下载的Gradle包的类型。默认情况下,gradlew会下载bin分发包,但Gradle还提供了一个all分发包,包含了更多的信息,比如说源代码、二进制文件与文档等。那么,我们就可以通过该配置指定下载包的类型。
除此之外,还可以通过在build.gradle配置文件中定一个task来设定gradlew的各项配置,如下所示:
接下来,再去执行gradle wrapper,执行完毕后查看gradle-wrapper.properties,如下所示:
可以看到,gradle下载包变为了gradle-3.4-all.zip,即all版本。
此外,gradle wrapper还支持通过HTTP Basic认证来配置下载,即指定好用户名与密码,大家可以参考Gradle文档了解相关信息。
最后,Gradle提供了通过SHA-256校验和来验证下载包是否完整的功能,这里描述一下。
比如说,我需要使用gradle-3.4-bin,那就再进入到子目录中,找到gradle-3.4-bin.zip文件,执行如下命令:
shasum -a 256 gradle-3.4-bin.zip
输出如下所示:
72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205 gradle-3.4-bin.zip
这就表示gradle-3.4-bin.zip的sha-256校验和为72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205,将其加入到gradle-wrapper.properties文件中,如下所示:
distributionSha256Sum= 72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205
这样,通过gradlew下载Gradle软件包时,Gradle会自动匹配校验和,确保我们下载的是完整的文件。
总结:
注:本文转自圣思园张龙老师
阅读原文