开发这么久,gradle 和 gradlew 啥区别、怎么选?

简介: 开发这么久,gradle 和 gradlew 啥区别、怎么选?

翻译自《gradle-vs-gradlew-difference》


使用 Gradle 的开发者最常问的问题之一便是: gradle 和 gradlew 的区别?。


这两个都是应用在特定场景的 Gradle 命令。通过本篇文章你将了解到每个命令干了什么,以及如何在两个命令中做选择。


快速摘要


如果你正在开发的项目当中已经包含 gradlew 脚本,安啦,可以一直使用它。没有包含的话,请使用 gradle 命令生成这个脚本。


想知道为什么吗,请继续阅读。

gradle 命令

如果你从 Gradle 官网(https://gradle.org/releases)下载和安装了 Gradle 的话,你便可以使用安装在 bin 路径下的 gradle 命令了。当然你记得将该 bin 路径添加到设备的 PATH 环境变量中。


此后,在终端上运行 gradle 的话,你会看到如下输出:

1832b220aa754cd18c504acc7686a560.png

你会注意到输出里打印了 Gradle 的版本,它对应着你运行的 gradle 命令在设备中的 Gradle 安装包版本。这听起来有点废话,但在谈论 gradlew 的时候需要明确这点,这很重要。


通过这个本地安装的 Gradle,你可以使用 gradle 命令做很多事情,包括:


使用 gradle init 命令创建一个新的 Gradle 项目或者使用 gradle wrapper 命令创建 gradle wrapper 目录及文件

在一个 Gradle 项目内使用 gradle build 命令进行 Gradle 编译

通过 gradle tasks 命令查看当前的 Gradle 项目中支持哪些 task

上述的命令均使用你本地安装的 Gradle 程序,无论你安装的是什么版本。


如果你使用的是 Windows 设备,那么 gradle 命令等同于 gradle.bat,gradlew 命令等同于 gradlew.bat,非常简单。

gradlew 命令

gradlew 命令,也被了解为 Gradle wrapper,与 gradle 命令相比它是略有不同的。它是一个打包在项目内的脚本,并且它参与版本控制,所以当年复制了某项目将自动获得这个 gradlew 脚本。


“可那又如何?”


好吧,如果你这么想。让我告诉你,它有很多重要的优势。

1. 无需本地安装 gradle

gradlew 脚本不依赖本地的 Gradle 安装。在设备上第一次运行的时候会从网络获取 Gradle 的安装包并缓存下来。这使得任何人、在任何设备上,只要拷贝了这个项目就可以非常简单地开始编译。

2. 配置固定的 gradle 版本

这个 gradlew 脚本和指定的 Gradle 版本进行绑定。这非常有用,因为这意味着项目的管理者可以强制要求该项目编译时应当使用的 Gradle 版本。


Gradle 特性并不总是互相兼容各版本的,所以使用 Gradle wrapper 可以确保项目每次编译都能获得一致性的结果。


当然这需要编译项目的人使用 gradlew 命令,如下是在项目内运行 ./gradlew 的示例:

1832b220aa754cd18c504acc7686a560.png

输出和运行 gradle 命令的结果比较相似。但仔细查看你会发现版本不一样,不是上面的 6.8.2 而是 6.6.1。


这个差异说重要也重要,说不重要也不重要。


但当使用 gradlew 的话可以免于担心由于 Gradle 版本导致的不一致性,缘自它可以保证所有的团队成员以及 CI 服务端都会使用相同的 Gradle 版本来构建这个项目。


另外,几乎所有使用 gradle 命令可以做的事情,你也可以使用 gradlew来完成。比如编译一个项目就是 ./gradlew build。


如果你愿意的话,可以拷贝 示例项目 并来试一下gradlew。

gradle 和 gradlew 对比

至此你应该能看到在项目内使用 gradlew 通常是最佳选择。确保 gradlew 脚本受到版本控制,这样的话你以及其他开发者都可以收获如上章节提到的好处。


但是,难道没有任何情况需要使用 gradle 命令了吗?当然有。如果你期望在一个空目录下搭建一个新的 Gradle 项目,你可以使用 gradle init 来完成。这个命令同样会生成 gradlew 脚本。


(如下的表格简单列出两者如何选)可以说,使用 gradlew 确实是 Gradle 项目的最佳实践。

你想做什么? gradle 还是 gradlew
编译项目 gradlew
测试项目 gradlew
项目内执行其他 Gradle task gradlew
初始化一个 Gradle 项目或者生成 Gradle wrapper gradle

原文

https://tomgregory.com/gradle-vs-gradlew-difference/

相关文章
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
173 2
|
6月前
|
Java API 项目管理
Java一分钟之-Gradle插件开发:自定义构建逻辑
【6月更文挑战第5天】Gradle插件开发详解:从入门到发布。文章介绍如何创建自定义插件,强调依赖管理、任务命名和配置阶段的理解。示例代码展示插件实现及避免常见问题的方法。最后,讨论插件的发布与共享,助你提升构建效率并贡献于开发者社区。动手实践,打造强大Gradle插件!
127 3
|
6月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
305 0
|
数据安全/隐私保护 Android开发
浅谈build.gradle写法,促使我们更高效开发
浅谈build.gradle写法,促使我们更高效开发
178 0
|
XML Java Maven
安卓开发必备——build.gradle文件初探(一)
虽然已经在安卓开发岗位工作了大半年了,但因为作者并没有系统的学习过安卓开发,故基础这块一直都是作者本人的薄弱点,这也是安卓开发必备的由来,希望能填补自己在这方面的缺漏
223 0
|
Shell Android开发
哪怕不学Gradle,这些开发中的常见操作,你也值得掌握(下)
Gradle 是每个 Android 同学都逃不开的一个话题。
224 0
|
测试技术 开发工具 Android开发
哪怕不学Gradle,这些开发中的常见操作,你也值得掌握(上)
Gradle 是每个 Android 同学都逃不开的一个话题。
134 0
哪怕不学Gradle,这些开发中的常见操作,你也值得掌握(上)
|
Java 开发工具 Android开发
安卓开发必备——build.gradle文件初探(二)
上一篇(安卓开发必备——build.gradle文件初探(一) - 掘金 (juejin.cn))我们探讨了关于安卓项目中最外层目录下的build.gradle,这一篇我们将继续说build.gradle文件
303 0
|
Java Android开发
【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )(二)
【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )(二)
145 0
|
人工智能 移动开发 Java
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
2431 0
Android Studio插件版本与Gradle 版本对应关系