• gradlewrapper.properties中各属性的含义


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

    2017-02-13 00:02:57 爱博客大伯 阅读数 19202更多

    分类专栏: android gradle

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/u013553529/article/details/55011602

    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

    注:目前最新的是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) 去 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

    执行./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) 先将下载到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

    执行./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) 先将下载到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)
    

    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);
            }
        }

    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. 参考

  • 相关阅读:
    BZOJ_2588_Spoj 10628. Count on a tree_树剖+主席树
    BZOJ_1901_Zju2112 Dynamic Rankings_树状数组+主席树
    单例模式
    JDBC连接数据库查询信息的步骤(提取成配置文件方式)
    JDBC访问数据库查询信息的步骤(硬编码格式)
    大数据
    accp
    递归
    struts2中Action到底是什么,怎么理解
    转发和重定向的区别(简单解释)
  • 原文地址:https://www.cnblogs.com/grj001/p/12223938.html
Copyright © 2020-2023  润新知