`

理解 Gradle Wrapper

阅读更多
问题背景

今天使用 gradle build 命令时,提示 gradle 版本兼容性问题,build 失败了。
解决:使用 gradle wrapper 命令,可以指定 gradle 的版本。

理解 Gradle Wrapper

绝大多数使用 Gradle 的开发者都会使用 Gradle Wrapper。这是个很正确的选择,因为这使得该项目的开发人员不需要操心于 Gradle 的安装上和 gradle 版本的兼容性问题。正因为 wrapper 无处不在,因此我们需要理解它可以做什么。

一、如果你还没使用 wrapper

使用 wrapper 保证了团队中每一个开发者都使用同样版本的 Gradle,并能够使用 Gradle 进行项目的构建(即使他们的电脑上并没有安装 Gradle)。

想生成一个 gradle wraper 是十分容易的( gradle wraper 只需要生成一次,以后就可以到处运行了)。首先需要安装 Gradle,然后进入项目目录,在命令行中执行 gradle wrapper 命令(当然需要在 build.gradle 文件中定义一个 wrapper 任务),就大功告成了。你可以增加 --gradle-version X.Y 选项去指定你想使用的 Gradle 版本。
// file: build.gradle
task wrapper(type: Wrapper) { 
    gradleVersion = '3.5' 
}


现在你可以通过 gradlew shell 脚本或 bat 文件,在你的项目根目录中运行任何的 Gradle 任务。



二、Gradle Wrapper 的文件结构组成

Gradle Wrapper 由四个文件组成,这些文件在你的项目目录中。

*1 -  gradlew : shell 脚本,Unix 用户可以通过它来执行 Gradle 任务。
*2 -  gradlew.bat : bat 脚本,Windows 用户可以通过它执行 Gradle 任务
*3 -  gradle/wrapper/gradle-wrapper.jar : wrapper 的可执行 JAR;wrapper 的代码所在。
*4 -  gradle/wrapper/gradle-wrapper.properties : 一个属性文件,用来配置 wrapper


你应该将这些文件 commit 到版本管理器中。
它们体积很小,且独立于操作系统,对于 wrapper 的使用是十分重要的。


三、Gradle Wrapper 做了什么

当你运行 Gradle Wrapper 时它做了以下几件事:
1. 解析给予 gradlew 的参数
2. 安装正确版本的 Gradle
3. 调用 Gradle 去执行指定的任务

注意 wrapper 仅接受两个可选参数:
* -q 或 --quiet 去阻止输出
* -g 或 --gradle-user-home 去指定一个和替换的 Gradle 的 home 目录。
Gradle 的安装阶段是唯一令人十分感兴趣的阶段。首先,它会检查你的 GRADLE_USER_HOME,查看在这个目录下是否有所需要的 Gradle。如果这里有,wrapper 就会去调用该 Gradle。如果没有,wrapper 会下载所需的 Gradle。
有一点需要注意,wrapper 会忽略任何安装在你系统上的 Gradle。wrapper 另外在自己的目录中下载 Gradle,并调用这些 Gradle。当 wrapper 执行任务时,它会使用所有的全局配置,如在Gradle home 目录中的 gradle.properties 文件。
哪些是 Gradle Wrapper 没有做的

Gradle Wrapper 并没有执行你的任务,它只是确认你有所需要的 Gradle 然后调用它。wrapper 是十分轻量的一层,用来消除开发人员自己管理 Gradle 的麻烦。
这意味着 wrapper 与 Gradle 本身是完全分离的。一个 2014 年的 wrapper 可以使用 Gradle 4.0 构建一个项目,一个今天才安装的 wrapper 可以使用 Gradle 2.0 构建一个项目。
如果你在构建中遇见了一个问题,wrapper 出错的可能性极小,因为它仅仅调用了 Gradle。


四、Wrapper 的配置

我在前面提到,在你的项目中,其中一个是 wrapper 的配置文件 gradle/wrapper/gradle-wrapper.properties 。
通常这个文件是这样的:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-all.zip

distributionBase + distributionPath 指定了 wrapper 保存下载的 Gradle 的路径。默认情况下 GRADLE_USER_HOME 是 ~/.gradle ,所以这个 wrapper 会保存 Gradle 在 ~/.gradle/wrapper/dists 。
zipStoreBase 和 zipStorePath 是很相似的。它们指定了 wrapper 保存下载的 Gradle 压缩包的位置。
distributionUrl 通常是你比较关心的,通过它你可以指定你需要的 Gradle 版本,和下载的地址。


五、切换 gradle 的版本

wrapper 的文档中说:
如果你想切换你所使用的 Gradle 版本,你不需要重新执行 wrapper 任务,
仅需要在 gradle-wrapper.properties 文件中更新 distributionUrl 即可。



六、wrapper 的升级

通常情况下你不需要更新 Gradle Wrapper。
但如果需要,你可以在更新 Gradle 之后通过执行 gradle wrapper 任务来进行更新。

升级 wrapper 没有什么问题,但不要期待有令人激动的新特性。
自从 2014 年以来,升级 wrapper 完全没有意义。




转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2430172















引用:

https://medium.com/@bherbst/understanding-the-gradle-wrapper-a62f35662ab7

https://blog.csdn.net/zsensei/article/details/78443501


-

分享到:
评论

相关推荐

    gradle-wrapper,梯度包装.zip

    **Gradle Wrapper 深入理解与应用** 在软件开发领域,Gradle 是一个流行的构建自动化工具,尤其在Java和Android开发中广泛使用。Gradle Wrapper(简称gradle-wrapper)是Gradle提供的一种便捷机制,使得开发人员...

    wrapper-:解决org.gradle.wrapper.GradleWrapperMain找不到或无法加载主类

    首先,我们要理解Gradle Wrapper的工作原理。它包含两个主要部分:`gradlew`(Windows系统为`gradlew.bat`)脚本和`gradle-wrapper.jar`。`gradlew`脚本负责调用`gradle-wrapper.jar`,该JAR文件中包含了运行Gradle...

    gradle-4.1-all.zip+gradle-wrapper.properties

    其次,`gradle-wrapper.properties`是Gradle Wrapper的配置文件,它定义了如何下载和使用Gradle。Wrapper使得项目无需在每个开发者的机器上手动安装Gradle,而是通过配置文件自动下载特定版本的Gradle。在UE4项目中...

    gradle user guide

    《Gradle用户指南》提供了对于Gradle 2.14.1版本的详细指导,涵盖了从安装Gradle、使用命令行、理解Gradle Wrapper、Gradle守护进程,到依赖管理、多项目构建入门,以及持续构建和GUI工具使用等方面的基础知识。...

    spring gradle依赖 .gradle文件

    这个目录对于理解Gradle的工作原理和调试构建过程至关重要。 1. **Gradle Wrapper**:这是在"wrapper"子目录下的文件。Gradle Wrapper使得无需预先安装Gradle,就能执行构建。它包含了一组脚本和JAR文件,允许...

    gradle-2.12-all及本地配置方法

    - **Gradle Wrapper**:2.12版本的Wrapper使得项目的构建更加一致且易于分发,确保所有开发者都能使用相同版本的Gradle。 ### 2. 本地安装Gradle 2.12 #### 2.1 下载Gradle 首先,你需要访问Gradle官方网站的发行...

    gradle-4.6-all及本地配置方法

    2. 创建`gradle/wrapper`目录,并在其中创建`gradle-wrapper.properties`文件。该文件应包含以下内容: ``` distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip ``` 3. 更新`build...

    gradle-4.6-all.zip免费下载

    Gradle 是一个强大的构建自动化工具,广泛应用于Java、Android和其他多语言项目中。...在实际操作中,理解Gradle的配置语法、插件机制以及如何利用Gradle Wrapper进行版本控制,都是开发者必备的技能。

    thingsboard 编译所需文件包(gradle-2.13-bin.zip 、 gradle-6.3-bin.zip)

    将这些Gradle二进制包放置到`C:\Users\***\.gradle\wrapper\dists`目录下,意味着它们将被Gradle Wrapper使用。Gradle Wrapper是一个小的Java应用程序,可以确保项目始终使用一致的Gradle版本进行构建,无论开发者的...

    gradle-3.3-all及本地配置方法

    理解Gradle 3.3的关键特性并学会本地配置,对于Java开发者来说至关重要。无论是提升构建效率,还是利用Gradle的强大功能管理项目,都离不开对Gradle的深入理解和熟练应用。通过以上步骤,你已经具备了在本地安装和...

    深入理解Android之Gradle

    - **Gradle Wrapper**:为了确保团队成员使用的Gradle版本一致,通常会包含Gradle Wrapper,它包含了一个自包含的Gradle运行时环境。 **3. Gradle构建流程** - **初始化**:加载settings.gradle文件,确定项目结构...

    gradle-2.0-all.zip

    Gradle是一款强大的构建工具,广泛应用于Java、Android和其他多种项目的自动化构建。...通过理解Gradle在Android开发中的作用和Gradle Wrapper的工作原理,开发者可以更有效地管理和维护自己的开发环境。

    kotlin语法讲解基础14,后面还有后续视频

    - **Gradle Wrapper**:理解Gradle Wrapper的作用,它使得项目无需全局安装Gradle也能构建,提高了项目的可移植性。 总的来说,这一阶段的学习涵盖了Kotlin的基本语法和Gradle的使用,为后续的Kotlin编程打下坚实...

    最全gradle下载网址

    以上是关于Gradle的一些基础知识,对于开发者来说,理解并熟练运用这些概念和特性,将有助于提升项目的构建效率和维护性。如果你需要下载Gradle,可以访问官方站点(https://gradle.org/releases/)获取最新版本,...

    Android studio 配置gradle 2.3.1 插件所需pom、jar文件

    总结,配置Android Studio的Gradle插件2.3.1涉及到在`build.gradle`文件中指定版本,确保Gradle Wrapper与之兼容,以及理解`.jar`和`.pom`文件在构建过程中的作用。通过本地存储这些文件,开发者可以离线安装插件,...

    gradle多可用版本

    理解并掌握上述知识点,将有助于你有效地管理Gradle多可用版本,提升开发效率,同时保证项目的一致性和稳定性。在实际操作中,结合具体项目需求灵活运用这些方法,将使你的Gradle构建过程更加顺畅。

    gradle-2.14-all.zip工具下载

    首先,让我们来理解一下Gradle的基本概念。Gradle是一种基于Groovy语言的开源构建自动化系统,它引入了领域特定语言(DSL)来描述项目构建过程,使得构建脚本更加直观和可读。Gradle不仅支持Java项目,还能够很好地...

    gradle合集之gradle5.5.zip

    7. **Gradle Wrapper**:Gradle Wrapper是用于自动下载和运行Gradle的工具,5.5版进一步提升了其安全性,例如支持HTTPS和自签名证书,防止中间人攻击。 8. **缓存策略**:Gradle 5.5 引入了更智能的缓存策略,可以...

    gradle合集-gradle-6.0-all.zip

    Gradle 是一个强大的构建自动化工具,广泛用于Java、Android和其他多语言项目。Gradle 的核心特性包括灵活性、可扩展性和高...通过这些知识点,我们可以更好地理解Gradle 6.0 的优势,并在实际项目中充分利用它的功能。

    gradle7.3.1

    9. **Gradle Wrapper更新**:Gradle Wrapper是用于自动下载和运行Gradle的工具,7.3.1可能会包含对Wrapper的安全性改进和更新,确保安全地从官方源获取Gradle二进制文件。 10. **文档和用户界面**:新版本通常会...

Global site tag (gtag.js) - Google Analytics