前言
Gradle Wrapper
(Gradle
包装器)是Gradle
的一个特性,可以通过包装器指定项目构建时使用的Gradle
版本。
这一特性可以确保同一个项目组的人员构建环境是一致的(maven
无此特性)
介绍
Gradle Wrapper结构
一般Gradle
项目初始化(执行gradle init
)后都会带有Gradle Wrapper
。其关键结构在项目的根目录下,如下所示(省略与Gradle Wrapper
无关的文件):
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
在gradle/wrapper
目录下就是Gradle Wrapper
了。其中
-
gradle-wrapper.jar
就是下载项目构建使用的Gradle
的下载器 -
gradle-wrapper.properties
就是就是Gradle Wrapper
的配置文件了
而gradlew
和gradlew.bat
则分别是UNIX
和Windows
环境下调用包装器的脚本
配置文件详解
gradle-wrapper.properties
内部只有4
个配置项,如下所示
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-
distributionBase
指的是发布(可以类比maven
的package
)的根目录,其中GRADLE_USER_HOME
是系统变量或者环境变量 -
distributionPath
指的是发布的相对地址(相对distributionBase
) -
distributionUrl
指的是下载Gradle
的地址 -
zipStoreBase
指的是压缩zip
包的根目录 -
zipStorePath
指的是压缩zip
包的相对地址(相对zipStorePath
)
使用
使用Gradle Wrapper下载Gradle
在项目根目录下直接运行gradlew build
或者gradlew.bat build
(根据操作系统自行选择)就会自动下载项目需要使用的Gradle
(本地还是需要安装Gradle
哦)了
修改Gradle Wrapper配置
可能会有人吐槽,只要改好配置文件之后执行gradlew build
或者gradlew.bat build
。但是Gradle
本身也提供了指令进行配置的更新和自动让新配置生效,下面的演示是基于UNIX
系统,Winodos
系统请自行切换到gradlew.bat
。
- 更新
Gradle Wrapper
使用的Gradle
版本(可升级别也可降级):gradlew wrapper --gradle-version 4.9
- 更新
Gradle
的Gradle Wrapper
使用的Gradle
类型(分为all
和bin
,默认是bin
,bin
是执行包,all
则是完整包):gradlew wrapper --distribution-type all
- 更新下载
Gradle
的地址(除非是需要使用私库,不然不太建议使用):gradlew wrapper --gradle-distribution-url https\://services.gradle.org/distributions/gradle-4.9-bin.zip
上面的指令中的gradlew
也可以使用gradle
代替,表示使用本机安装的Gradle
来处理
常见问题
- 如果
Gradle Wrapper
相关文件缺失怎么办?在项目的根目录下执行
gradle wrapper
就会自动创建相关文件。 -
除了通过配置
gradle-wrapper.properties
还有什么办法指定项目的Gradle
版本?可以在
build.gradle
文件以下配置即可:wrapper { distributionUrl = https://services.gradle.org/distributions/gradle-4.9-all.zip distributionType = Wrapper.DistributionType.ALL }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。