Gradle: Gradle Wrapper

【Gradle 安装】

安装完毕后,记得设置一下环境变量。
Environment Variables:
GRADLE_HOME=D:\Program Files\Gadle\gradle-4.7
Path=%GRADLE_HOME%\bin


【Gradle Wrapper】
gradlew的本质是 gradle 命令的一个wrapper,也就是在gradle的基础上添加了一些额外功能具体来说就是自动下载。

wrapper执行流程:
1)根据gradle-wrapper.properties 的配置检查是否需要安装gradle
2)如果本地的gradle经过checksum验证通过,则不需要下载gradle,否则下载并安装gradle到某个目录
3)安装完毕,开始执行 tasks

gradle-wrapper.properties配置说明:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

默认配置如上,意思是说,从distributionUrl 下载gradle-4.7-bin.zip存放到 zipStoreBase + zipStorePath 目录下,然后安装到 distributionBase + distributionPath 目录下。

distributionBase, zipStoreBase 都可以取两个值:GRADLE_USER_HOME 或者 PROJECT
如果取值为PROJECT,则计算路径是 基于project目录来计算。
如果取值为GRADLE_USER_HOME,则计算路径是基于 用户的 home目录来计算的。
也就是说对于windows操作系统,默认基于 c:\users\<user_home>\.gradle
对于linux 系统,默认基于 $USER_HOME\.gradle 来计算

查看了gradle-wrapper.jar的源码,可以知道,当设置为GRADLE_USER_HOME时,会有一个搜索
Gradle home的过程:

1) -g 参数
2)java系统属性: -Dgradle.user.home
3) 环境变量:GRADLE_USER_HOME
4)用户 home 目录 (默认值)

private static File gradleUserHome(final ParsedCommandLine options) {
        if (options.hasOption("g")) {
            return new File(options.option("g").getValue());
        }
        return GradleUserHomeLookup.gradleUserHome();
    }

public class GradleUserHomeLookup
{
    public static final String DEFAULT_GRADLE_USER_HOME;
    public static final String GRADLE_USER_HOME_PROPERTY_KEY = "gradle.user.home";
    public static final String GRADLE_USER_HOME_ENV_KEY = "GRADLE_USER_HOME";
    
    public static File gradleUserHome() {
        String gradleUserHome;
        if ((gradleUserHome = System.getProperty("gradle.user.home")) != null) {
            return new File(gradleUserHome);
        }
        if ((gradleUserHome = System.getenv("GRADLE_USER_HOME")) != null) {
            return new File(gradleUserHome);
        }
        return new File(GradleUserHomeLookup.DEFAULT_GRADLE_USER_HOME);
    }
    
    static {
        DEFAULT_GRADLE_USER_HOME = System.getProperty("user.home") + "/.gradle";
    }
}


如果想要使用你已经安装的gradle,怎么办呢?
这个在使用gradle-wrapper时是行不通的,除非你不使用gradle-wrapper来构建
如何使用已经离线的下载的zip安装包呢?
修改gradle-wrapper.properties中配置项为本地URL即可。

例如我之前通过在线方式安装了gradle-4.7-bin.zip,
我拿到该zip文件,copy一份放到D盘,修改名称为:gradle-4.7-bin-test.zip,
然后修改gradle-wrapper.properties中配置项为:distributionUrl=file\:///d:/gradle-4.7-bin-test.zip
然后使用gradlew 执行一个task,就自动安装好了。

相关推荐