0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

gradle和gradlew的区别?

哆啦安全 来源:哆啦安全 作者:哆啦安全 2022-12-13 09:57 次阅读

使用Gradle开发者最常问的问题之一便是:gradlegradlew的区别?

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

快速摘要

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

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

gradle 命令

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

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

4deabc3e-7a86-11ed-8abf-dac502259ad0.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的示例:

4e004ff4-7a86-11ed-8abf-dac502259ad0.png

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

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

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

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

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

https://github.com/tkgregory/spring-boot-api-example.git

gradle 和 gradlew 对比

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

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

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

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

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80835
  • 脚本
    +关注

    关注

    1

    文章

    387

    浏览量

    14829
  • gradle
    +关注

    关注

    0

    文章

    26

    浏览量

    699

原文标题:开发这么久,gradle 和 gradlew 啥区别、怎么选?

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FCCSP与FCBGA都是倒装有什么区别

    本文简单介绍了倒装芯片球栅阵列封装与倒装芯片级封装的概念与区别。 FCCSP与FCBGA都是倒装,怎么区分?有什么区别
    的头像 发表于 11-16 11:48 529次阅读
    FCCSP与FCBGA都是倒装有什么<b class='flag-5'>区别</b>

    输入和输出电压的区别

    电子发烧友网站提供《输入和输出电压的区别.pdf》资料免费下载
    发表于 10-24 09:20 0次下载
    输入和输出电压的<b class='flag-5'>区别</b>

    MIPI和LVDS显示屏的区别

    MIPI和LVDS显示屏的区别
    的头像 发表于 09-23 10:02 2107次阅读

    简述功放和音响的区别

    功放和音响在音频系统中扮演着不同的角色,它们之间存在着明显的区别。以下将从本质、配套设备、功能、实用性、价格等多个方面详细阐述功放和音响的区别
    的头像 发表于 08-22 11:46 2155次阅读

    请问LM2902与LM2902KV的区别是否只有供电电压的区别

    请问下LM2902与LM2902KV的区别是否只有供电电压的区别?LM2904与LM2904V也是电压的区别
    发表于 08-22 06:20

    以太网端口和千兆端口的区别

    以太网端口和千兆端口在多个方面存在显著的区别,这些区别主要体现在速度、应用范围、技术规格以及网络性能等方面。
    的头像 发表于 08-07 15:42 971次阅读

    使用Android Studio 2021.3.1软件,编译app_android时出错怎么解决?

    错误信息:Gradle sync failed: Process \'command \'git\'\' finished with non-zero exit value 128 (536 ms
    发表于 06-26 07:21

    示波器有源探头和无源探头的区别

    示波器有源探头和无源探头在多个方面存在显著的区别,这些区别主要体现在以下几个方面。
    的头像 发表于 05-09 16:24 1638次阅读

    fpga芯片和soc芯片的区别

    FPGA芯片和SoC芯片在多个方面存在显著的区别
    的头像 发表于 03-14 17:28 2797次阅读

    fpga芯片和普通芯片的区别

    FPGA芯片和普通芯片在多个方面存在显著的区别
    的头像 发表于 03-14 17:27 1545次阅读

    开关SA和SB的区别

    开关SA和SB的区别 开关SA和SB是电气系统中常用的两种开关设备。它们在外观、用途、工作原理、特点等方面存在一定的区别。下面将详细介绍开关SA和SB的区别。 一、外观区别 开关SA和
    的头像 发表于 02-26 10:30 5707次阅读

    接近开关pnp和npn的区别

    接近开关pnp和npn的区别 开关是电子电路中常见的元件,用于控制电流的传递。其中,PNP和NPN开关是最常见的开关类型之一,它们在结构、工作原理和应用方面有一些明显的区别。在本文中,将详尽、详实
    的头像 发表于 01-04 10:25 5076次阅读

    bv和bvr电线有什么区别?bv和bvr电线的区别

    bv和bvr电线有什么区别?bv和bvr电线的区别? BV和BVR电线是两种常见的电线类型,它们之间在一些方面有一些明显的区别。下面将详细介绍BV和BVR电线的区别。 1. 定义: -
    的头像 发表于 12-09 15:06 3520次阅读

    gradle安装与配置unity

    Gradle是一种用于构建和自动化构建过程的强大工具,而Unity则是一款跨平台的游戏引擎。在Unity项目中使用Gradle可以帮助我们更方便地管理和构建项目,同时能够提供更高的自定义能力和稳定性
    的头像 发表于 12-07 14:48 2002次阅读

    MOSFET与IGBT的区别

    MOSFET与IGBT的区别
    的头像 发表于 11-27 15:36 1074次阅读
    MOSFET与IGBT的<b class='flag-5'>区别</b>