回顾

上一篇介绍了如何使用 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. golang简介

    GO语言是Google于2009年推出的一门新的系统编程语言 特点: 静态编译 垃圾回收 简洁的符号和语法 平坦的类型系统 基于CSP的并发模型 高效简单的工具链 丰富的标准库 为什么选择go语言 编 ...

  2. 通过Samba练习metasploit的使用

    文章学习利用metasploit通过Samba3.X获取metasploitable2的shell,从而去熟悉metasploit的使用. 环境: kali IP:192.168.137.133 me ...

  3. JS原型链详解

    最近面试被问到了就决定好好深入理解原型链 对象 要清楚原型链,首先要弄清楚对象: 普通对象 最普通的对象:有__proto__属性(指向其原型链),没有prototype属性. 原型对象(person ...

  4. [Linux Test Project] [PATCH] Fix an bad variable name erro in runltp script

    [PATCH] Fix an bad variable name erro in runltp script (/opt/ltp/runltp) Hi All,   I got an error fo ...

  5. Linux磁盘分区实例演示

    一直觉得Linux的分区操作很高大上,之前在物理机上装的Linux,所以不敢随便乱来,今天重回Windows,下面利用Windows上的Linux虚拟机实际操作一次磁盘分区,要求:1G的硬盘分成2个2 ...

  6. PEP8规范总结

    PEP8规范总结 代码编排 1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的 ...

  7. 并行开发 2.plink

    原文:8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...

  8. k3 cloud中数值以百分比的形式展示

    显示格式化字符串:P去掉区域设置的勾选

  9. C#使用Process启动exe程序,不弹出控制台窗口的方法

    背景:使用wkhtmltopdf工具将html转换成pdf时,这个工具在进行转换时会弹出命令行窗口显示转换过程,但是在项目运行时弹出服务器突然弹出控制台窗口会很奇怪,尤其是当转换多个时.解决这个问题 ...

  10. 【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念

    那么我们进入本章的最后一节,CISC和RISC. 我们先来回顾一下,我们这一章的一个概览.我们之前已经把指令格式和指令的寻址方式都讲完了,这两部分呢是本章的一个重点.而本章的这一部分,CISC和RIS ...