gradlew 和 gradle命令的区别

14,576 阅读1分钟

定义区别:

Gradlew是包装器,自动下载包装器里定义好的gradle 版本,保证编译环境统一,gradle 是用本地的gradle版本。
对于gradlew,其在Android studio的指定是在gradle/wrapper/gradle-wrapper.properties 中完成的,例如下面的代码即指定app编译的gradle版本为4.1。
#Wed Mar 07 14:24:26 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

存放路径不同

对于系统gradle其存放在 ~/.gradle 下面。本系统可在该文件夹下面找到gradle2.12相关的内容。对于gradlew其存放在 ~/.gradlew/wrapper/dists 下面。这个下面有着许多版本的gradle。这些就是gradlew下载下来的gradle版本。

使用gradle版本不同

若你在命令行使用gradlew 那么你使用的是存放在~/.gradlew/wrapper/dists路径下面的,通过在gradle/wrapper/gradle-wrapper.properties文件指定的gradle脚本。而你若使用gradle命令行,那么你使用的是~/.gradle下面的gradle脚本。

验证测试

我在AS 的build.gradle下面放入如下代码。
task hello1 << {
    println 'hello1'
    println GradleVersion.current().toString()
}
使用gradlew命令运行task
./gradlew hello1

得到
> Task :hello1
hello1
Gradle 4.1

而使用gradle命令运行task
gradle hello1
得到
   > Minimum supported Gradle version is 3.3. Current version is 2.12.
   
这个和我之前分析的一样。说明上面的分析没有问题。
参考资料
  1. https://docs.gradle.org/current/userguide/gradle_wrapper.html
  2. http://saiwei.me/?p=3747