gradle-wrapper.properties中各属性的含义

1. gradle-wrapper.properties

每一个用gradle编译的工程,都会有一个gradle\wrapper目录。该目录下有2个文件:gradle-wrapper.jargradle-wrapper.properties

其中gradle-wrapper.properties的内容如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-bin.zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

注:目前最新的是3.3版。

1.1 distributionUrl

distributionUrl是要下载的gradle的地址,使用哪个版本的gradle,就在这里修改。

gradle的3种版本:

  1. gradle-xx-all.zip是完整版,包含了各种二进制文件,源代码文件,和离线的文档。例如,https://services.gradle.org/distributions/gradle-3.1-all.zip

  2. gradle-xx-bin.zip是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。例如,https://services.gradle.org/distributions/gradle-3.1-bin.zip

  3. gradle-xx-src.zip是源码版,只包含了Gradle源代码,不能用来编译你的工程。例如,https://services.gradle.org/distributions/gradle-3.1-src.zip

如果只是为了编译,可以不用完整版,只需要二进制版即可,例如,gradle-3.1-bin.zip。

1.2 其他4个属性

zipStoreBasezipStorePath组合在一起,是下载的gradle-3.1-bin.zip所存放的位置。 
zipStorePathzipStoreBase指定的目录下的子目录。

distributionBasedistributionPath组合在一起,是解压gradle-3.1-bin.zip之后的文件的存放位置。 
distributionPathdistributionBase指定的目录下的子目录。

下载位置可以和解压位置不一样。

zipStoreBasedistributionBase有两种取值:GRADLE_USER_HOMEPROJECT

其中,GRADLE_USER_HOME表示用户目录。 
在windows下是%USERPROFILE%/.gradle,例如C:\Users\<user_name>\.gradle\。 
Linux下是$HOME/.gradle,例如~/.gradle

PROJECT表示工程的当前目录,即gradlew所在的目录。

1.3 例1:各项属性的整体含义

例1,gradle-wrapper.properties的内容如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-bin.zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

各项属性的整体含义,如下:

  • (1) 去 https://services.gradle.org/distributions/gradle-3.1-bin.zip 下载gradle的3.1版本,只包含binary的版本。

  • (2) 下载的gradle-3.1-bin.zip存放到C:\Users\<user_name>\.gradle\wrapper\dists目录中。 
    (注:具体还有2级目录,即全路径为C:\Users\<user_name>\.gradle\wrapper\dists\gradle-3.1-bin\<url-hash>\,gradle-3.1-bin目录是根据下载的gradle的文件名来定的,<url-hash>目录名是根据distribution url路径字符串计算md5值得来的,具体参考PathAssembler.Java中的rootDirName()getHash(),PathAssembler.java的位置见本文最后的参考路径)

  • (3) 解压gradle-3.1-bin.zip,将解压后的文件存放到C:\Users\<user_name>\.gradle\wrapper\dists中。(注:具体还有2级目录,同上)

1.4 搭建gradle测试环境

从任意一个gradle编译的工程中拷贝出gradle相关的文件,如下图: 
注:.gradle目录是后生成的。

在cmd或者cygwin中执行./gradlew即可。

1.5 例2:zipStoreBase=PROJECT,distributionBase=GRADLE_USER_HOME

例2,gradle-wrapper.properties的内容如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=PROJECT
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

执行./gradlew,log如下:

Downloading https://services.gradle.org/distributions/gradle-3.3-bin.zip
...
...
Unzipping D:\gradle_env\wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu\gradle-3.3-bin.zip to C:\Users\galian\.gradle\wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

含义:

  • (1) 先将下载到zipStoreBase和zipStorePath指定的位置,即gradlew所在目录的wrapper/dists目录下,即D:\gradle_env\wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu\gradle-3.3-bin.zip。 
    注意:这里的gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu就是上面提到的2级目录。

  • (2) 然后解压到distributionBase和distributionPath指定的位置,即user_home目录的wrapper/dists目录下,在我的电脑中位置:C:\Users\galian\.gradle \wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu 
    注意:这里的gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu就是上面提到的2级目录。

1.6 例3:zipStoreBase=PROJECT,distributionBase=PROJECT

把gradle-wrapper.properties中的distributionBase改为PROJECT:

distributionBase=PROJECT
distributionPath=wrapper/dists
zipStoreBase=PROJECT
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

执行./gradlew,log如下:

$ ./gradlew

Unzipping D:\gradle_env\wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu\gradle-3.3-bin.zip to D:\gradle_env\wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu

:help
Welcome to Gradle 3.3.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
To see more detail about a task, run gradlew help --task <task>
BUILD SUCCESSFUL
Total time: 7.199 secs
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

含义:

  • (1) 先将下载到zipStoreBase和zipStorePath指定的位置,即gradlew所在目录的wrapper/dists目录下。

  • (2) 解压的位置也是gradlew所在目录中的wrapper/dists目录下。下载位置和解压位置是同一个位置。

注意:执行./gradlew前,需要将gradle-3.3-bin.zip.lck文件删除,否则会报如下错误:

Exception in thread "main" java.lang.RuntimeException: Gradle distribution 'D:\gradle_env\wrapper\dists\gradle-3.3-bin\37bujujhbsnkqrb1fi6n3qirfu' does not contain any directories. Expected to find exactly 1 directory.
        at org.gradle.wrapper.Install.getDistributionRoot(Install.java:84)
        at org.gradle.wrapper.Install.access$000(Install.java:29)
        at org.gradle.wrapper.Install$1.call(Install.java:51)
        at org.gradle.wrapper.Install$1.call(Install.java:47)
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
        at org.gradle.wrapper.Install.createDist(Install.java:47)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2. 相关代码

gradle-3.3-src\gradle-3.3\subprojects\wrapper\src\main\java\org\gradle\wrapper\PathAssembler.java

    /**
     * Determines the local locations for the distribution to use given the supplied configuration.
     */
    public LocalDistribution getDistribution(WrapperConfiguration configuration) {
        String baseName = getDistName(configuration.getDistribution());
        // distName是gradle-3.3-bin等,不带后缀
        String distName = removeExtension(baseName);
        // rootDirName是2级目录
        String rootDirName = rootDirName(distName, configuration);
        // distDir 是存放zip解压后的文件的目录
        File distDir = new File(getBaseDir(configuration.getDistributionBase()), configuration.getDistributionPath() + "/" + rootDirName);
        // distZip是存放下载的zip的目录
        File distZip = new File(getBaseDir(configuration.getZipBase()), configuration.getZipPath() + "/" + rootDirName + "/" + baseName);
        return new LocalDistribution(distDir, distZip);
    }

    // 获取2级目录:一级是gradle版本,另一级是url的hash值
    private String rootDirName(String distName, WrapperConfiguration configuration) {
        String urlHash = getHash(configuration.getDistribution().toString());
        return distName + "/" + urlHash;
    }

    /**
     * This method computes a hash of the provided {@code string}.
     * <p>
     * The algorithm in use by this method is as follows:
     * <ol>
     *    <li>Compute the MD5 value of {@code string}.</li>
     *    <li>Truncate leading zeros (i.e., treat the MD5 value as a number).</li>
     *    <li>Convert to base 36 (the characters {@code 0-9a-z}).</li>
     * </ol>
     */
    private String getHash(String string) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            byte[] bytes = string.getBytes();
            messageDigest.update(bytes);
            return new BigInteger(1, messageDigest.digest()).toString(36);
        } catch (Exception e) {
            throw new RuntimeException("Could not hash input string.", e);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

3. gradle各版本文件对比

以gradle3.3版本为例。

3.1 gradle-3.3-all.zip 和 gradle-3.3-bin.zip

bin版本比完整版少了3个目录:srcdocssamples

3.2 gradle-3.3-all.zip 和 gradle-3.3-src.zip

src版是编译gradle的源码,src版的subprojects目录与完整版的src目录基本是一致的。 
src版是编译环境,所以源码目录结构都是gradle工程的结构。 
完整版的src目录,只是源文件,不能直接拿来编译。

4. 参考

本文作者:Abracadabra(爱博客大伯) 

原文地址:http://blog.csdn.net/u013553529/article/details/55011602

相关阅读:

《gradle 用户指南中文版》目录

gradle-wrapper.properties中各属性的含义的更多相关文章

  1. Meta标签中的属性及含义

    一.Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的forma ...

  2. 关于Meta标签中format-detection属性及含义

    一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...

  3. SpringBoot读取properties中的属性值

    1.在application.properties中添加以下内容: learn.blog.name=hello learn.blog.title=千回教育系统 2.新增属性关联的类: package ...

  4. JSTL的forEach标签中的属性具体含义

    JSTL的forEach标签在JSP页面经常替代Java脚本的循环语句,生成多个记录的信息.一般只需 一个一个的展示记录即可,有些需要获取当前记录的索引.在需要获取当前记录的索引的时候可能 有点麻烦, ...

  5. spring 配置中相关属性的含义:

    1:parent元素属性 一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值.一个child bean定义是一个能够从paren ...

  6. 页面头部<meta>中的属性和含义

    1<meta name="robots" content="index, follow" />    none:搜索引擎将忽略此网页,等价于noin ...

  7. 在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

    contex指上下文,实际上就是一个web项目:path是虚拟目录,访问的时候用127.0.0.1:8080/welcom/*.jsp访问网页,welcome前面要加/;docBase是网页实际存放位 ...

  8. jmeter XML格式的结果中各属性的含义

    最近在搞jmeter,生成xml的测试报告,对报告字段进行解释,可能是自己不会找,网上资源不多,好不容易找到的,记录下来: 感谢博主:http://blog.163.com/zhang_jing/bl ...

  9. gradle项目对比maven项目的目录架构以及对gradle wrapper的理解

    转载请注明出处: 1.使用 idea 搭建 gradle项目 注意 type 选择 gradle 以及 language 选择 grooy                       搭建后的项目架构 ...

随机推荐

  1. 20145328 《Java程序设计》实验三实验报告

    20145328 <Java程序设计>实验三实验报告 实验名称 Java敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 敏捷开发是一种以人为 ...

  2. 团队项目系列博客 —— 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号)

    团队项目系列博客 -- 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号) 标签(空格分隔): wampserver php 参考:参考文献1.慕课网.知乎.github 一.w ...

  3. Oracle查询一个表的数据插入到另一个表

    1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: insert ...

  4. # fabirc 配置多组服务器 密码与密钥一起使用 key_filename的设置

    环境说明 myv myv2 是配置在/etc/hosts 的两台 虚拟机 虚拟机ip. 参考英文文档 官方文档的例子不是给的很详细.. http://docs.fabfile.org/en/1.13/ ...

  5. poj_2528 Mayor's posters (线段树经典题+离散化方法)

    由于题面中给定的wall最大长度为10 000 000:若简单用线段树势必会超时. 而注意到题面中规定了输入海报的个数<=1000:因此不妨离散化,使得线段中叶节点仅含有1000个,那么线段最大 ...

  6. LeetCode——Single Element in a Sorted Array

    Question Given a sorted array consisting of only integers where every element appears twice except f ...

  7. 百度云如何免费扩容至2055G?

    百度云如何免费扩容至2055G? 上篇说到整一个新的百度账号,那么5G的百度云内存肯定满足不了我们收集癖的需求.那么就来了解一下怎么扩容吧. 主要是在手机端实现的 用这个新的百度账号在手机APP上登录 ...

  8. jdk官网历史版本下载&Oracle账号密码

    jdk官网下载地址: https://www.oracle.com/technetwork/java/javase/archive-139210.html 账号密码: 1772885836@qq.co ...

  9. 【jdk源码分析】java多线程开启的三种方式

    1.继承Thread类,新建一个当前类对象,并且运行其start()方法 package com.xiaostudy.thread; /** * @desc 第一种开启线程的方式 * @author ...

  10. 8条规则图解JavaScript原型链继承原理

    原形链是JS难点之一,而且很多书都喜欢用一大堆的文字解释给你听什么什么是原型链,就算有图配上讲解,有的图也是点到为止,很难让人不产生疑惑. 我们先来看一段程序,友情提示sublimeText看更爽: ...