gradle

您所在的位置:网站首页 离线的含义 gradle

gradle

2024-03-22 05:54| 来源: 网络整理| 查看: 265

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

1. gradle-wrapper.properties

每一个用gradle编译的工程,都会有一个gradle\wrapper目录。该目录下有2个文件:gradle-wrapper.jar和gradle-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种版本:

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

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

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

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

1.2 其他4个属性

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

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

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

zipStoreBase和distributionBase有两种取值:GRADLE_USER_HOME和PROJECT。

其中,GRADLE_USER_HOME表示用户目录。 在windows下是%USERPROFILE%/.gradle,例如C:\Users\\.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\\.gradle\wrapper\dists目录中。 (注:具体还有2级目录,即全路径为C:\Users\\.gradle\wrapper\dists\gradle-3.1-bin\\,gradle-3.1-bin目录是根据下载的gradle的文件名来定的,目录名是根据distribution url路径字符串计算md5值得来的,具体参考PathAssembler.java中的rootDirName()和getHash(),PathAssembler.java的位置见本文最后的参考路径)

(3) 解压gradle-3.1-bin.zip,将解压后的文件存放到C:\Users\\.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) 先将 gradle-3.3-bin.zip 下载到 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 ... 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 BUILD SUCCESSFUL Total time: 7.199 secs

含义:

(1) 先将 gradle-3.3-bin.zip 下载到 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}. *

* The algorithm in use by this method is as follows: * * Compute the MD5 value of {@code string}. * Truncate leading zeros (i.e., treat the MD5 value as a number). * Convert to base 36 (the characters {@code 0-9a-z}). * */ 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个目录:src、docs和samples。

这里写图片描述

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

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

这里写图片描述

4. 参考 (1) https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html(2) https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/wrapper/Wrapper.PathBase.html(3) http://services.gradle.org/distributions/gradle-3.3-src.zip(4) http://services.gradle.org/distributions(5) gradle-3.3-src\gradle-3.3\subprojects\wrapper\src\main\java\org\gradle\wrapper\PathAssembler.java


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3