gradle-wrapper.properties中各属性的含义 不念不忘少年蓝@ 2022-05-30 02:47 285阅读 0赞 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种版本: 1. gradle-xx-all.zip是完整版,包含了各种二进制文件,源代码文件,和离线的文档。例如,[https://services.gradle.org/distributions/gradle-3.1-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][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][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][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`目录是后生成的。 ![这里写图片描述][SouthEast] 在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如下: ![这里写图片描述][SouthEast 1] 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`。 ![这里写图片描述][SouthEast 2] ## 3.2 gradle-3.3-all.zip 和 gradle-3.3-src.zip ## src版是编译gradle的源码,src版的`subprojects`目录与完整版的`src`目录基本是一致的。 src版是编译环境,所以源码目录结构都是gradle工程的结构。 完整版的`src`目录,只是源文件,不能直接拿来编译。 ![这里写图片描述][SouthEast 3] # 4. 参考 # * (1) [https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html][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][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][http_services.gradle.org_distributions_gradle-3.3-src.zip] * (4) [http://services.gradle.org/distributions][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 用户指南中文版》目录][gradle] [https_services.gradle.org_distributions_gradle-3.1-all.zip]: https://services.gradle.org/distributions/gradle-3.1-all.zip [https_services.gradle.org_distributions_gradle-3.1-bin.zip]: https://services.gradle.org/distributions/gradle-3.1-bin.zip [https_services.gradle.org_distributions_gradle-3.1-src.zip]: https://services.gradle.org/distributions/gradle-3.1-src.zip [Linux]: http://lib.csdn.net/base/linux [SouthEast]: /images/20220530/d4e74980d7d64caa8ddccbc3d1dd47f1.png [SouthEast 1]: /images/20220530/30e6914aaa9d478e86d68f26ec1b4564.png [SouthEast 2]: /images/20220530/59250bb886374db892d9e5e5c925ee73.png [SouthEast 3]: /images/20220530/3f4bf46d4b3c4c89a10d69aef2fd4193.png [https_docs.gradle.org_current_dsl_org.gradle.api.tasks.wrapper.Wrapper.html]: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html [https_docs.gradle.org_current_javadoc_org_gradle_api_tasks_wrapper_Wrapper.PathBase.html]: https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/wrapper/Wrapper.PathBase.html [http_services.gradle.org_distributions_gradle-3.3-src.zip]: http://services.gradle.org/distributions/gradle-3.3-src.zip [http_services.gradle.org_distributions]: http://services.gradle.org/distributions [gradle]: http://blog.csdn.net/testcs_dn/article/details/76513232
还没有评论,来说两句吧...