开发中开始使用 Gradle 时肯定会遇到的一个疑惑之一是 gradle
和 gradlew
有什么区别。它们都是 Gradle 命令,但它们每个命令的作用,以及何时使用,有什么区别呢?
1. gradle 命令
如果我们按照 官方文档 安装了 Gradle (并且 Gradle 的 bin 目录添加到了 Path 环境变量中),然后在终端就可以执行 gradle
命令,在输出中它打印了 Gradle 的版本。这是运行的计算机上的 Gradle 安装版本的 gradle
命令。这在稍后讨论 gradlew
时,这是一个重要的区别。
C:\Users\itmob.cn>gradle
> Task :help
Welcome to Gradle 7.4.
Directory 'C:\Users\itmob.cn' does not contain a Gradle build.
To create a new build in this directory, run gradle init
For more detail on the 'init' task, see https://docs.gradle.org/7.4/userguide/build_init_plugin.html
For more detail on creating a Gradle build, see https://docs.gradle.org/7.4/userguide/tutorial_using_tasks.html
To see a list of command-line options, run gradle --help
For more detail on using Gradle, see https://docs.gradle.org/7.4/userguide/command_line_interface.html
For troubleshooting, visit https://help.gradle.org
BUILD SUCCESSFUL in 837ms
1 actionable task: 1 executed
这是通过本地安装的 Gradle 执行 gradle
命令,还可以执行其他 gradle 命令,如:gradle init
创建新的 Gradle 项目;gradle wrapper
创建 wrapper;gradle tasks
查看 Gradle 项目中可用的 task。
2. gradlew 命令
正如 官方文档 中第一段对 Gradle Wrapper 的介绍:
执行 Gradle 构建的推荐方法是借助 Gradle Wrapper(简称:Wrapper/包装器)。包装器是一个调用 Gradle 声明版本的脚本,必要时可以事先下载。因此,开发人员可以快速启动并运行 Gradle 项目,而无需遵循手动安装过程,从而节省公司的时间和金钱。
原文:
The recommended way to execute any Gradle build is with the help of the Gradle Wrapper (in short just “Wrapper”).
The Wrapper is a script that invokes a declared version of Gradle, downloading it beforehand if necessary.
As a result, developers can get up and running with a Gradle project quickly without having to follow manual installation processes saving your company time and money.
它是需要打包在项目中的脚本,是项目的一部分,需要提交到版本控制中,clone
项目时会自动获得 gradlew 脚本。
使用 gradlew
的好处:
-
无需在本地安装 gradle
当本地计算机中没有安装 gradle 时,可以直接用 gradlew
命令来构建项目。
gradlew
脚本不依赖于本地 Gradle 安装。它在本地计算机上首次运行时会从网上获取 Gradle 执行文件,并将其缓存。这使得在任何地方都可以非常轻松地克隆项目并构建它。
-
使用固定版本构建项目
当本地计算机中的 Gradle 版本与项目所需版本不一致时,可以用项目中自带的 gradlew
来构建。
gradlew
脚本与固定的 Gradle 版本相关联。这意味着项目可以配置使用固定的哪个版本的 Gradle 来构建它。因此使用 Gradle Wrapper 构建项目,不会因为 Gradle 在各版本之间可能出现的不兼容造成构建的不一致甚至构建失败(因为每次构建都使用的是 Wrapper 中声明的 Gradle 版本)。
如下是一个 Android 项目中执行 gradlew
命令的示例:
C:\Users\itmob.cn\WorkSpace\AndroidDemo> ./gradlew
> Task :help
Welcome to Gradle 7.6.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see more detail about a task, run gradlew help --task <task>
To see a list of command-line options, run gradlew --help
For more detail on using Gradle, see https://docs.gradle.org/7.6/userguide/command_line_interface.html
For troubleshooting, visit https://help.gradle.org
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
输出与运行 gradle
命令时的输出类似。但版本有所不同(7.4 与 7.6)。
使用 gradlew
避免了在不同的计算机中构建项目的 Gradle 版本不一致的问题,可以确保所有团队成员或 CI 服务器都使用相同的 Gradle 版本来构建项目。
3. 总结
gradle
命令做的事情也可以用 gradlew
命令来做,但是项目中更推荐使用 gradlew
来构建项目。