Gradle 包装器 Wrapper
Gradle 包装器(Wrapper)允许我们在不安装 Gradle 的情况下运行具有指定版本和设置的构建。 这个包装器可以被认为是 Windows 上的批处理脚本和其他操作系统的 shell 脚本。 当我们使用包装器调用 Gradle 时,它会自动下载并构建指定的版本。
大多数软件需要在使用前安装在计算机上。 在计算机上安装任何工具都会成为用户不必要的负担。 检查用户是否安装了正确的版本也很重要。 Gradle 包装器克服了所有这些问题,并受到所有开发人员的青睐来开始 Gradle 构建。
Gradle 执行独立于已安装版本的构建过程。 所以包装器是启动 Gradle 构建的首选方式。 我们可以根据需要创建包装脚本。
下图展示了 Gradle 的工作流程:
我们可以找到用于基于 UNIX 的系统的 gradlew 文件和用于 Windows 系统的 gradlew.bat。 这些文件充当 gradle 命令,因此,如果机器上未安装 Gradle,则会自动下载并安装它。
也可以定义一个定义包装器版本的任务。 如果执行此任务,它会创建包装器并下载正确版本的 Gradle。
Gradle Wrapper 的好处
以下是使用 Gradle 包装器的一些好处:
- Gradle 包装器在指定的 Gradle 版本上标准化项目,并导致更可靠和更健壮的构建。
- Gradle wrapper 为不同的用户提供相同的 Gradle 版本,执行环境就像更改 Wrapper 定义一样简单。
我们将使用第一个 Gradle 包装器执行以下操作:
- 设置一个新的 Gradle 项目并为其添加一个包装器。
- 使用现有包装器运行项目。
- 将包装器升级到最新版本的 Gradle。
添加 Gradle 包装器
Gradle 带有一个称为包装器的内置任务。 执行此任务时,它会在项目中生成必要的包装文件。 要将包装器添加到项目中,请运行包装器命令,如下所示:
$ gradle wrapper
上面的命令将为我们的项目提供包装器,并将包装器属性文件生成到目录 gradle/wrapper/gradle-wrapper.properties。
gradle-wrapper 属性文件内容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
此文件包含有关 Gradle 发布版本的以下信息:
- 托管 Gradle 发行版的服务器。
- Gradle 发行版的类型,默认情况下,它是 bin 发行版,仅包含运行时,但不包含示例代码和文档。
- Gradle 版本用于执行构建。 默认情况下,包装器任务选择机器的已安装版本。
注意
:如果我们想将包装文件共享给其他开发人员和执行环境,那么我们必须将它们推送到版本控制中。 大多数情况下,包装文件(包括 JAR 文件)都比较小。 预计会将 JAR 文件添加到版本控制中。 但是,一些公司不允许项目将二进制文件提交给版本控制。 在那一刻,除了这种方法之外没有其他选择。
上述所有方面都可以在包装文件生成期间借助命令行进行配置。
以下命令用于指定用于下载和执行包装器的 Gradle 版本:
--gradle-version
下面的命令用于指定用于包装器的 Gradle 分发类型。 可用选项为 bin 和 all,默认值为 'bin':
--distribution-type
以下命令用于将完整 URL 指向 Gradle 分发 zip 文件:
--gradle-distribution-url
考虑以下示例来解释命令行选项的使用。 我们希望使用 7.5 版创建包装器,并使用 -all 分发版来启用我们的 IDE 来启用代码完成并能够导航到 Gradle 源代码。 以下命令可以满足这些要求:
$ gradle wrapper --gradle-version 7.5 --distribution-type all
上面的命令将创建一个 7.5 版本的包装器。
如何使用 Gradle 包装器
建议使用包装器执行项目的构建,以确保构建的标准、可控和可靠执行。 Wrapper 执行构建,几乎就像使用 Gradle 安装执行构建一样。 根据我们的操作系统,我们可以运行 gradlew
或 gradlew.bat
命令而不是 gradle 命令。 以下命令演示了如何在 Windows 机器上为基于 Java 的项目使用包装器:
$ gradlew build
如果机器上没有 Gradle 发行版,包装器将下载并提供给我们,并将其存储在本地文件系统中。
后续构建调用将重用现有的本地分发,因为 Gradle 属性中的分发 URL 不会更改。
更新 Gradle 包装器
软件需要更新以使其与最新版本保持连接,从而受益于新功能和改进。 我们还可以通过更改包装器属性文件中的分发 URL 属性来手动升级 Gradle 版本。
但是,建议通过 wrapper 任务升级 wrapper 版本,通过指定的 Gradle 版本。 包装器任务确保对包装器 shell 脚本所做的任何优化都应用于项目,尽管我们必须将这些对包装器文件的更改提交给版本控制。
gradle 包装器任务用于生成指定版本的包装器。 默认情况下,它会考虑安装的版本。
要将 Gradle 包装器升级到指定版本,请运行以下命令:
$ gradlew wrapper --gradle-version7.5
上述命令会将项目升级到 Gradle 版本 7.5。
自定义 Gradle 包装器
Gradle 的默认运行时行为相当不错,但我们可以自定义 Gradle。 安全约束可能需要为使用 Gradle 的组织自定义包装器。 但是,内置的包装器任务提供了许多选项来创建我们需要的运行时行为。
假设我们不想重复使用 -all 选项,这样我们就可以节省一些键盘敲击次数。 为此,我们可以重新配置包装器任务。 在 build.gradle 文件中添加以下代码片段以自定义包装器任务:
wrapper{
distributionType = Wrapper.DistributionType.ALL
}