Gradle Wrapper 的工作流程
Gradle Wrapper 的工作流程主要包括以下几个步骤:
- 读取配置信息:Gradle Wrapper 会读取项目根目录下的
gradle-wrapper.properties
文件,以获取 Gradle 版本和其他配置信息。distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
- 执行 Gradle 构建命令:当执行
gradlew
或gradlew.bat
命令时,Gradle Wrapper 会被触发。当你第一次运行./gradlew
或gradlew.bat
时,Wrapper 脚本会检查指定的 Gradle 版本是否已经存在于本地。如果不存在,它会根据gradle-wrapper.properties
中的distributionUrl
下载对应版本的 Gradle 发行版压缩包到GRADLE_USER_HOME
指定的路径(默认是用户的 Gradle 缓存目录)。 - 解压和配置:下载的 Gradle 分发包会被解压到用户的 Gradle 用户主目录下的
wrapper/dists
目录中,并配置为可用状态。 - 构建项目:使用下载和解压的 Gradle 版本执行构建任务。
- 缓存管理:Gradle Wrapper 会将下载的 Gradle 分发包存储在本地缓存中,以便后续构建可以重用已下载的版本,而无需重新下载。
- 更新 Gradle Wrapper:如果需要更新 Gradle 版本,可以通过运行
gradlew wrapper
命令并指定新的版本号来更新gradle-wrapper.properties
文件中的配置,并重新下载所需版本的 Gradle。
这个工作流程确保了项目构建的一致性,无论开发者的本地环境中是否已经安装了 Gradle,或者安装的是哪个版本的 Gradle。通过这种方式,Gradle Wrapper 简化了项目的构建过程,并减少了因环境差异导致的构建问题。
流程图如下图所示:
整个流程简要概括主要分为下面 3 步:
- 首先当我们刚创建的时候,如果指定的版本没有被下载,就先会去 Gradle 的服务器中下载对应版本的压缩包;
- 下载完成后需要先进行解压缩并且执行批处理文件;
- 后续项目每次构建都会重用这个解压过的 Gradle 版本。
Gradle Wrapper 生成
想要生成 Gradle Wrapper 的话,需要本地配置好 Gradle 环境变量。Gradle 中已经内置了内置了 Wrapper Task,在项目根目录执行执行gradle wrapper
命令即可帮助我们生成 Gradle Wrapper。
执行命令 gradle wrapper
命令时可以指定一些参数来控制 wrapper 的生成。具体有如下两个配置参数:
--gradle-version
用于指定使用的 Gradle 的版本--gradle-distribution-url
用于指定下载 Gradle 版本的 URL,该值的规则是http://services.gradle.org/distributions/gradle-${gradleVersion}-bin.zip
执行gradle wrapper
命令之后,Gradle Wrapper 就生成完成了,项目根目录中生成如下文件:
每个文件的含义如下:
gradle-wrapper.jar
:包含了 Gradle 运行时的逻辑代码。gradle-wrapper.properties
:定义了 Gradle 的版本号和 Gradle 运行时的行为属性。gradlew
:Linux 平台下,用于执行 Gralde 命令的包装器脚本。gradlew.bat
:Windows 平台下,用于执行 Gralde 命令的包装器脚本。
gradle-wrapper.properties
文件的内容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionBase
:Gradle 解包后存储的父目录。distributionPath
:distributionBase
指定目录的子目录。distributionBase+distributionPath
就是 Gradle 解包后的存放的具体目录。distributionUrl
:Gradle 指定版本的压缩包下载地址。zipStoreBase
:Gradle 压缩包下载后存储父目录。zipStorePath
:zipStoreBase
指定目录的子目录。zipStoreBase+zipStorePath
就是 Gradle 压缩包的存放位置。
Gradle Wrapper 更新
更新 Gradle Wrapper 有 2 种方式:
- 接修改
distributionUrl
字段,然后执行 Gradle 命令。 - 执行 gradlew 命令
gradlew wrapper –-gradle-version [version]
。
下面的命令会将 Gradle 版本升级为 7.2。
gradlew wrapper --gradle-version 7.2
gradle-wrapper.properties
文件中的 distributionUrl
属性也发生了改变。
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
Gradle Wrapper 自定义
Gradle 已经内置了 Wrapper Task,因此构建 Gradle Wrapper 会生成 Gradle Wrapper 的属性文件,这个属性文件可以通过自定义 Wrapper Task 来设置。比如想要修改要下载的 Gralde 版本为 7.2,可以这么设置:
task wrapper(type: Wrapper) {
gradleVersion = '7.6'
}
也可以设置 Gradle 发行版压缩包的下载地址和 Gradle 解包后的本地存储路径等配置。
task wrapper(type: Wrapper) {
gradleVersion = '7.2'
distributionUrl = '../../gradle-7.2-bin.zip'
distributionPath=wrapper/dists
}
distributionUrl
属性可以设置为本地的项目目录,你也可以设置为网络地址。
更多消息资讯,请访问昂焱数据。