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

审核编辑 :李倩


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

    关注

    114

    文章

    3631

    浏览量

    79543
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14635
  • gradle
    +关注

    关注

    0

    文章

    26

    浏览量

    662

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

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

收藏 人收藏

    评论

    相关推荐

    线路板的层和阶有什么区别

    线路板的层和阶有什么区别
    的头像 发表于 02-23 17:27 226次阅读

    光耦与光继电器有何区别

    光耦与光继电器有何区别
    的头像 发表于 12-13 13:59 410次阅读
    光耦与光继电器有何<b class='flag-5'>区别</b>?

    gradle安装与配置unity

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

    MOSFET与IGBT的区别

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

    一文详解pcb和smt的区别

    一文详解pcb和smt的区别
    的头像 发表于 10-08 09:31 1573次阅读

    Gradle版本目录功能的简单应用

    版本帝 Gradle 最新版本已经到了 8.1.1 ,你是不是还在用着 Gradle 3 的功能?今天我们了解一下 Gradle 7.0 之后推出的新功能 Version Catalog 版本目录
    的头像 发表于 09-30 11:12 638次阅读

    gradle的安装和配置

    Java中主要有三大构建工具:Ant、Maven和Gradle。Ant用的比较少、Maven用的相对普遍,而Gradle的发展则将是未来的一种趋势。 本篇文件我们来介绍gradle的安装和配置
    的头像 发表于 09-25 17:11 1735次阅读
    <b class='flag-5'>gradle</b>的安装和配置

    如何将Maven项目转换为Gradle项目

    今天我们来讲讲如何将 Maven 项目转换为 Gradle 项目。这个过程还是蛮简单的,下面通过一个例子来说明怎么转换。 Gradle 设置 如果没有安装 gradle, 我们可以从 Grad
    的头像 发表于 09-25 15:48 1089次阅读

    Gradle中的版本使用

    今天带大家了解一下 Gradle 中 sourceCompatiblity 和 targetCompatibility 的使用配置和区别。如果有对 Gradle 不太了解的朋友可以看我们之前的一些
    的头像 发表于 09-25 15:32 323次阅读

    Gradle构建的多模块Spring Boot项目

    0. 前言 相比起 Maven 的 XML 配置方式,Gradle 提供了一套简明的 DSL 用于构建Java 项目,使我们就像编写程序一样编写项目构建脚本。 本文将从无到有创建一个用 Gradle
    的头像 发表于 09-25 14:46 1197次阅读
    <b class='flag-5'>Gradle</b>构建的多模块Spring Boot项目

    流量卡和物联卡的区别及选择指南!

    流量卡和物联卡的区别及选择指南!
    的头像 发表于 09-07 17:03 602次阅读

    轨到轨运放与一般运放的区别

    轨到轨运放与一般运放的区别  随着电子技术的不断发展,越来越多的电子厂商开始研发和制造轨到轨运放,以取代一般的运放。在使用轨到轨运放和一般的运放时,我们需要注意一些区别和不同之处。本文将详细介绍这些
    的头像 发表于 08-27 14:55 5608次阅读

    不同等级晶振的区别

    不同等级的晶振,到底有哪些区别?晶振根据不同的标准和要求,被划分为民用级、工业级、车规级和军工级,这期给大家科普它们的区别所在。
    的头像 发表于 08-15 15:50 1134次阅读
    不同等级晶振的<b class='flag-5'>区别</b>

    SDWAN和专线在成本上的区别

    SDWAN和专线在成本上的区别
    的头像 发表于 07-20 14:11 484次阅读

    不同GPIO类库的区别

    重点来讲解一下什么是类库,如何使用,以及不同的GPIO类库的区别
    的头像 发表于 07-02 15:03 550次阅读
    不同GPIO类库的<b class='flag-5'>区别</b>