Gradle Wrapper
當把本地一個項目放入到遠程版本庫的時候,如果這個項目是以gradle構建的,那么其他人從遠程倉庫拉取代碼之后如果本地沒有安裝過gradle會無法編譯運行,如果對gradle不熟悉,會使得無法很好的去快速構建項目代碼。所以gradle可以自動生成一鍵運行的腳本,把這些一起上傳遠程倉庫,使得即使沒有安裝gradle也可以自動去安裝並且編譯項目代碼。
- Gradle是個構建系統,能夠簡化你的編譯、打包、測試過程。熟悉Java的同學,可以把Gradle類比成Maven。
- Gradle Wrapper的作用是簡化Gradle本身的安裝、部署。不同版本的項目可能需要不同版本的Gradle,手工部署的話比較麻煩,而且可能產生沖突,所以需要Gradle Wrapper幫你搞定這些事情。Gradle Wrapper是Gradle項目的一部分。
簡單的gradle wrapper生成
【gradle wrapper生成】
我們在新建的目錄下使用命令行輸入gradle wrapper
命令:

在新建的目錄下可以看到以下文件:


【gradle wrapper文件說明】
|____gradle | |____wrapper | | |____gradle-wrapper.jar //具體業務邏輯 | | |____gradle-wrapper.properties //配置文件 |____gradlew //Linux 下可執行腳本 |____gradlew.bat //Windows 下可執行腳本
(1)gradlew.bat
gradlew.bat
是bat 腳本,Windows 用戶可以通過它執行 Gradle 任務,配合gradle文件夾使用。
而Linux使用的是gradlew
,gradlew
是一個shell 腳本,Unix 用戶可以通過它來執行 Gradle 任務。
(2)gradle-wrapper.jar
gradle-wrapper.jar是Gradle Wrapper的主體功能包(wrapper 的代碼所在)。項目打包必須要有的,不然無法去執行gradlew。
(3)gradle-wrapper.properties
gradle-wrapper.properties
文件主要指定了該項目需要什么版本的Gradle,從哪里下載該版本的Gradle,下載下來放到哪里。從圖示項目中可以知道我要使用gradle-3.5版本。

我們使用gradlew命令的使用,會根據這個文件來使用對應的gradle進行構建。當本地GRADLE_USER_HOME
(當前用戶目錄,一般指~/.gradle
)中的~/.gradle/wrapper/dists
沒有安裝gradle時,將會自動從此地址distributionUrl
中下載gradle,之后的執行將不會再次下載安裝。
【文件如何配合使用】
當從版本庫下載代碼之后,如果你本機安裝過gradle,當然直接直接編譯運行既可。但是對沒有安裝gradle的用戶,可以執行項目根目錄下的gradlew.bat
腳本(Linux是執行gradlew
命令),
將會在gradle-wrapper.properties
中的~/.gradle/wrapper/dists
目錄中首次下載並安裝gradle並可以編譯代碼,一個指令可以下載並安裝gradle來構建項目,由此可見非常方便。大概流程如下:
- 解析
gradle-wrapper.properties
文件,獲取項目需要的 gradle 版本下載地址。 - 判斷本地用戶目錄下的
~/.gradle
目錄下是否存在該版本,不存在該版本,走第3點,存在走第4點。 - 下載
gradle-wrapper.properties
指定版本,並解壓到用戶目錄的下~/.gradle
文件下。 - 利用
~/.gradle
目錄下對應的版本的 gradle 進行相應自動編譯操作。
將Wrapper添加到Gradle項目
在命令行中運行 wrapper
task 即可配置Wrapper,如下:
$gradle wrapper --gradle-version 2.8
:wrapper
BUILD SUCCESSFUL
Total time: 3.546 secs
運行完畢后,可以看到在項目的更目錄中多了上面提到的一些文件和目錄:

除了直接在命令行執行外,也可以在build.gradle文件中添加一個Wrapper
task:
task wrapper(type: Wrapper){ // type: Wrapper中的Wrapper開頭W必須大寫 gradleVersion='2.8' distributionBase='GRADLE_USER_HOME' distributionPath='wrapper/dists' zipStoreBase='GRADLE_USER_HOME' zipStorePath='wrapper/dists' distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip }
//每一項都可單獨設置,gradle-2.8-all.zip表示下載該版本Gradle的源碼
然后執行這個task:
gradle -q wrapper