gradle-wrapper.properties中各属性的含义
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
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
注:目前最新的是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\<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个目录: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
本文作者:Abracadabra(爱博客大伯)
原文地址:http://blog.csdn.net/u013553529/article/details/55011602
相关阅读:
gradle-wrapper.properties中各属性的含义的更多相关文章
- Meta标签中的属性及含义
一.Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的forma ...
- 关于Meta标签中format-detection属性及含义
一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...
- SpringBoot读取properties中的属性值
1.在application.properties中添加以下内容: learn.blog.name=hello learn.blog.title=千回教育系统 2.新增属性关联的类: package ...
- JSTL的forEach标签中的属性具体含义
JSTL的forEach标签在JSP页面经常替代Java脚本的循环语句,生成多个记录的信息.一般只需 一个一个的展示记录即可,有些需要获取当前记录的索引.在需要获取当前记录的索引的时候可能 有点麻烦, ...
- spring 配置中相关属性的含义:
1:parent元素属性 一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值.一个child bean定义是一个能够从paren ...
- 页面头部<meta>中的属性和含义
1<meta name="robots" content="index, follow" /> none:搜索引擎将忽略此网页,等价于noin ...
- 在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途
contex指上下文,实际上就是一个web项目:path是虚拟目录,访问的时候用127.0.0.1:8080/welcom/*.jsp访问网页,welcome前面要加/;docBase是网页实际存放位 ...
- jmeter XML格式的结果中各属性的含义
最近在搞jmeter,生成xml的测试报告,对报告字段进行解释,可能是自己不会找,网上资源不多,好不容易找到的,记录下来: 感谢博主:http://blog.163.com/zhang_jing/bl ...
- gradle项目对比maven项目的目录架构以及对gradle wrapper的理解
转载请注明出处: 1.使用 idea 搭建 gradle项目 注意 type 选择 gradle 以及 language 选择 grooy 搭建后的项目架构 ...
随机推荐
- PHP+MySQL数据库编程的步骤
第一步:PHP连接MySQL服务器 第二步:选择当前要操作的数据库 第三步:设置请求或返回的数据的字符集 第四步:执行各种SQL语句. PHP连接MySQL服务器 1.mysql_connect() ...
- 20145310《Java程序设计》第3次实验报告
20145310<Java程序设计>第3次实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 实验步骤 首先使用git设置用户名和ssh公钥 使用git ...
- 20135320赵瀚青LINUX第一章读书笔记
第一章-Linux内核简介 Unix的历史 依旧被认为是最强大和最优秀的系统 由一个失败的操作系统Multics中产生 被移植到PDP-11型机中 由其他组织进一步开发 重写了虚拟内存系统,最终官方版 ...
- php7安装Memcached扩展
要安装 memcached,需要先安装依赖库 libmemcached wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/lib ...
- [HAOI2015]T2
[题目描述] 有一棵点数为N的树,以点1为根,且树点有边权.然后有M个操作,分为三种: 操作1:把某个节点x的点权增加a. 操作2:把某个节点x为根的子树中所有点的点权都增加a. 操作3:询问某个节点 ...
- CentOS 7 SSH远程证书登陆
SSH远程证书登陆是使用"公私钥"认证的方式来进行SSH登录. 1.创建公私钥 创建方式有很多种,比如说通用ssh连接工具创建,然后把公钥上传到Server主机对应的用户目录下: ...
- 【GAN】GAN的原理及推导
把GAN的论文看完了, 也确实蛮厉害的懒得写笔记了,转一些较好的笔记,前面先贴一些 原论文里推理部分,进行备忘. GAN的解释 算法流程 GAN的理论推理 转自:https://zhuanlan.zh ...
- springMvc REST 请求和响应
前言: 突然怎么也想不起来 springMvc REST 请求的返回 类型了! (尴尬+究竟) 然后本着 方便的想法 百度了一下 发现了个问题,大家在写 springMvc RES ...
- spring boot 笔记--第三章
spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...
- Android -- 提交数据到服务器,Get Post方式, 异步Http框架提交
1. 发送请求到服务器有几种方式 (1)HttpURLConnection (2)Httpclient 同步框架 (3)AsyncHttpClient 异步框架 (https://github.com ...