IDEA如何正确配置Gradle? GRADLE_USER_HOME 和 Gradle user home的区别
目录
缘起
网上已经有了如此多的IDEA配置Gradle的文章,为何本菜鸟还想再写一篇这样的水文呢? 原因是按照网上大多数的配置,Gradle并不能按照你的想法很好的工作,倒不是说根据其他大佬的博客不能构建,而是你在构建时会发现IDEA使用的Gradle版本并不是wrapper中指定的版本。
目标
正确配置IDEA(2019.2.4), 使得在Terminal中执行以gradlew开头命令和操作图形化的IDEA使用Gradle版本是同一个版本。
GRADLE_USER_HOME和Gradle user home的区别
GRADLE_USER_HOME
-
GRADLE_USER_HOME指的是你需要配置的环境变量。该环境变量决定了执行 project/gradle/gradle-rapper.jar时下载 project/gradle/gradle-wrapper.properties中指定版本gradle的存放位置。
-
简言之:在
命令行
中输入的以
gradlew
的开头的命令会使用
GRADLE_USER_HOME
指定环境变量所在位置来存放下载的gradle.
- 注意:必须是gradlew开头的命令,不能是gradle开头的命令。原因是gradlew开头的命令说明你想使用gradle wrapper, 而gradle开头的命令则是使用的你配置在环境变量当中的gradle,这两个是不一样的
-
Gradle user home
- Gradle user home指的是IDEA中关于gradle的配置,该配置指是给IDEA使用的,当你在IDEA中点击gradle相关的图形按钮时,譬如gradle构建任务的按钮或者是Enable-AutoImport按钮时会使用Gradle user home指定的目录下载project/gradle/gradle-wrapper.properties指定的gradle版本
- 简言之:在IDEA中的各种图形化操作都是使用这个目录去保存下载的gradle。
IDEA Gradle user home的坑
- Gradle user home配置的不好的话是有一个大坑的,按照网上大多数的配置都会踩到这个坑,而且极不容易被发现。
- 这个坑的现象是:你在Terminal中输入的gradlew的任何命令使用的gradle版本和IDEA中图形化操作使用的gradle版本是不一致的。
- 造成这个坑的必要条件:
- 1、你下载了一个版本的Gradle版本,并且按照网上的博客配置了Gradle环境变量。
- 2、你在IDEA中配置了Gradle user home,并且该把该目录指向了你在本地自己下载解压的gradle。
- 如果你按照上面的配置,并且你自己单独下载的gradle和project/gradle/gradle-wrapper.properties中指定版本不一致时,你在IDEA中的Terminal中执行和点击IDEA图形按钮的版本并不一致。
如何验证这个坑?
- 可以在你下载的gradle/init.d目录中写一个名为 init.gradle的脚本。你需要在三个地方写这个脚本,一个是你自己单独下载的gradle,一个是GRADLE_USER_HOME中下载的gradle版本,一个是IDEA Gradle user home指定目录中下载的grald中都加上,你就能清晰的看出到底当前使用的是那个gradle.
|
|
最终解决方案
第一种解决方案,不下载Gradle,不配置关于Gradle的任何的环境变量,不配置IDEA的Gradle user home
- 这种方式对于向使用Gradle的小白来说比较方便。此时你创建IDEA工程时,IDEA会自动下载工程目录下gradle/gradle-wrapper.properties中指定的Gradle版本到你的家目录的 .gradle目录下。
- 实际上使用Gradle的确不需要自己额外安装一个Gradle,gradle的设计者考虑到gradle会频繁的升级因此每个gradle工程会带有一个gradle的目录,这个目录主要作用就是描述当前工程需要哪个版本的gradle,以及如何下载gradle. 因此你拿到别人的gradle项目,即使本机没有安装gradle,当你执行以gradlew开头的命令时会自行下载这个项目想要的gradle版本。
第二种方案:如果你想自己安装gradle,并且所有的工程都使用你自己单独安装的gradle。
- 配置Gradle的环境变量,使得在任意的路径下可以执行gradle的可执行文件。
- 配置GRADLE_USER_HOME和IDEA 中的 Gradle user home路径,这里的路径实际上可以不指定。- 可选操作
- 配置 User from gradle指向安装的gradle:
第三种解决方案,配置单独的gradle,并且工程默认使用gradle wrapper.
- 配置Gradle的环境变量,使得在任意的路径下可以执行gradle的可执行文件。
- 配置GRADLE_USER_HOME和IDEA 中的 Gradle user home路径,这里的路径实际上可以不指定。
- 注意:如果想要指定Gradle user home,那么一定不要配置为你安装的gradle所在目录,否则即使制定了user gradle from : gradle-wrapper.properties也不起作用,此时IDEA图形化的操作只会使用你在外面配置的gradle,而不会使用gradle wrapper,即项目指定的gradle。
- 配置 User gradle frome: gradle-wrapper.properties: