Gradle 和 Gradlew 的区别

Wrapper Workflow

开发中开始使用 Gradle 时肯定会遇到的一个疑惑之一是 gradlegradlew 有什么区别。它们都是 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 的好处:

  1. 无需在本地安装 gradle

    当本地计算机中没有安装 gradle 时,可以直接用 gradlew 命令来构建项目。

    gradlew 脚本不依赖于本地 Gradle 安装。它在本地计算机上首次运行时会从网上获取 Gradle 执行文件,并将其缓存。这使得在任何地方都可以非常轻松地克隆项目并构建它。

  2. 使用固定版本构建项目

    当本地计算机中的 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 来构建项目。


作者:ITmob
来源:ITmob.cn
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×