回顾

上一篇介绍了如何使用 Gradle 快速创建 Java 项目,开始讲 Gradle Wrapper 之前先来重温一下通过 gradle init 命令创建的 Java 项目目录结构

├── build.gradle
├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│   └── java
│   └── App.java
└── test
└── java
└── AppTest.java

当时说过:有 2 种方式来编译这个示例项目

  1. 通过本机安装好的 gradle 命令编译
  2. 通过当前项目根目录下的 gradlew 命令编译(官方推荐的使用方式)

这篇文章的目的就是要介绍为什么官方推荐使用通过当前项目根目录下的 gradlew 命令编译项目

Gradle Wrapper 要解决什么问题

Gradle Wrapper 的目标是:任何人、任何时候、在任何电脑上拿到 gradle 创建的项目都能被准确无误的编译、执行

想象以下几个场景:

  • 把自己写好的代码共享给其他人使用,可能出现如下情况

    • 对方电脑没有安装 gradle
    • 对方电脑安装过 gradle,但是版本太旧了
  • 自己换电脑了,同样也会遇到上一种情况
  • 翻出了自己几年前写的代码,但是当前电脑的 gradle 版本太新了,无法直接编译几年前的旧代码

如何让上面的问题不再是问题,无论是哪种异常情况都能得到正确的编译?

今天的主角 Gradle Wrapper 就是为了解决以上问题而存在的,这也是官方推荐使用它的原因

如何解决

项目根目录下与 Gradle Wrapper 相关的几个配置文件

├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
  • gradlew 是 Linux, Mac, 类 unix 系统上的可执行脚本
  • gradlew.bat 是 Windows 系统上的可执行脚本
  • gradle-wrapper.properties 文件记录着以下信息
    • 当前项目想使用的 gradle 版本
    • 去哪里下载这个版本的 gradle
    • 下载之后的压缩包保存在哪里
    • 压缩包解压到哪里

当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息,准确的将指定版本的 gradle 下载并解压到指定的位置。之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本,完美的解决了上面提出的问题

疑问

到底什么时候使用自己安装的 gradle,什么时候使用当前项目下的 gradlew

  • 从其他人获得的代码,使用当前项目下的 gradlew
  • 使用自己安装的 gradle 新建项目。这样就等于给当前项目指定了希望其他人拿到项目之后使用的 gradle 版本。这种情况下由于我们自己安装过的 gradle 版本就是当前项目 gradlew 定义的版本,所以可以直接用自己安装的 gradle 执行各种构建命令,因为跟 gradlew 执行的效果一摸一样

原文出处:http://www.xiegangd.com/article/153490979773193

Gradle Wrapper 介绍的更多相关文章

  1. Gradle、Gradle Wrapper与Android Plugin for Gradle

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  2. 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系

    首先用一段通俗易懂但是不是非常专业的话描述一下三者的概念.区别和联系. Gradle是个构建系统,能够简化你的编译.打包.测试过程.熟悉Java的同学,可以把Gradle类比成Maven. Gradl ...

  3. Gradle Wrapper简述

    个人博客:http://www.enjoytoday.cn Gradle更多介绍参考:http://www.enjoytoday.cn/categorys/Gradle 案例源码:GitHub gra ...

  4. Could not find or load main class org.gradle.wrapper.GradleWrapperMain解决办法

    解决办法: gradlew is the gradle wrapper executable - batch script on windows and shell script elsewhere. ...

  5. Chapter 5. The Gradle Wrapper 关于gradle wrapper

    Most tools require installation on your computer before you can use them. If the installation is eas ...

  6. Upgrade with the Gradle Wrapper, gradlew升级

    springboot 2.0需要gradle 1+, 而自动构建的都是3.+,手动升级如下 Upgrade with the Gradle Wrapper If your existing Gradl ...

  7. gradle构建项目失败:Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9

    Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to ...

  8. Jenkins问题记录:android构建时提示Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9 Except

    -------------- -------------- 问题:今日job构建报出如下错误: Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all ...

  9. Gradle: Gradle Wrapper

    [Gradle 安装] 安装完毕后,记得设置一下环境变量.Environment Variables:GRADLE_HOME=D:\Program Files\Gadle\gradle-4.7Path ...

随机推荐

  1. [Linux] 029 脚本安装包

    1. 脚本安装包 脚本安装包并不是独立的软件包类型,常见安装的是源码包 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装 非常类似于 Windows 下软件的安装方式 ...

  2. Spring自动装配之依赖注入(DI)

    依赖注入发生的时间 当Spring IOC 容器完成了Bean 定义资源的定位.载入和解析注册以后,IOC 容器中已经管理类Bean定义的相关数据,但是此时IOC 容器还没有对所管理的Bean 进行依 ...

  3. input限制小数点的位数

    在做限制input小数点的时候,我本来想通过vue里面的的watch监听来实现, ---实现逻辑是,通过监听输入的内容,当出现"."(点)的时候,记录通过indexOf获取点的位置 ...

  4. Codeforces - 1191C - Tokitsukaze and Discard Items - 模拟

    https://codeforces.com/contest/1191/problem/C 一开始想象了一下,既然每次删除都是往前面靠,那么好像就是页数*页容量+空位数=最多容纳到的坐标. 至于为什么 ...

  5. python学习三十八天常用内置函数分类汇总

    python给我们提供丰富的内置函数,不用去写函数体,直接调用就可以运行,很方便快速给我提供开发所需要的函数. 1,查内存地址 id() 变量的内存地址 id() 2,输入输出 input()  pr ...

  6. python 注释有哪些和作用

    python 单行注释 #作为代表 python 多行注释 ‘’‘ 这是三个单引号注释 ’‘’ “”“ 这是三个双引号注释 ”“”

  7. CodeForces 739B Alyona and a tree (二分+树上差分)

    <题目链接> 题目大意: 给定一颗带权树,树的根是1,树上每个点都有点权,并且还有边权.现在给出“控制”的定义:对一个点u,设v为其子树上的节点,且$dis(u,v)≤val[v]$,则称 ...

  8. NGUI的拖拽和放下功能的制作,简易背包系统功能(drag and drop item)

    一我们添加sprite,给sprite添加背景图片和添加box collider,但是drag and drop item在attach中是找不到的只能在add component中查找添加,如下图: ...

  9. shell脚本从入门到精通(中级)之提高篇

    shell 脚本入门到精通(中级) 一.shell 脚本的执行 二.输出格式化 三.数据类型 四.重定向 五.变量 一.shell 脚本的执行 1. 脚本执行的4种方法 $ ls /tmp/test. ...

  10. JavaScript中的方法和属性

    书读百遍其义自见 学习<JavaScript设计模式>一书时,前两个章节中的讲解的JavaScript基础知识,让我对属性和方法有了清晰的认识.如下是我的心得体会以及部分摘录的代码. 不同 ...