一. ?The Gradle Wrapper(這是Gradle Wrapper的總覽,部分翻譯)
大多數工具在使用前要求先安裝到你的電腦上。如果安裝過程很簡單,你會覺得可以接受,但這有可能在build
時對用戶造成不必要的麻煩。另外,同樣重要的一點是,當我們在build
時,對于這些工具,用戶是否安裝的了正確的版本?假設他們build
了一個老版本的軟件會怎樣呢?
作為Gradle build
的推薦方式,The Gradle Wrapper
(此后簡稱Wrapper
)解決了如上兩個問題。
1. 使用Wrapper執行build
如果一個Gradle
工程已經設置過了Wrapper
(我們推薦所有的工程這樣做),你可以在項目的根目錄下使用如下命令行之一執行build操作
/gradlew <task> (on Unix-like platforms such as Linux and Mac OS X)
-
/gradlew <task> (on Windows using the gradlew.bat batch file)
每個Wrapper
都與一個Gradle
相關聯。所以指定一個Gradle
版本執行如上指令,都會去下載相應的Gradle distribution
,并且使用它去執行build
。
這不僅意味著你不需要去人為的安裝Gradle
,還意味著那你能確保所使用的Gradle
版本是這個build
所指定的。這使得你歷史的build
都更加可靠。無論何時,無論你是在使用說明,Stack Obverflow,文章還是哪里,當你看到一行命令是以gradle...
開頭的,你都可以使用如上恰當指令。
在一個Gradle
工程中,為了保證Wrapper
的完整性,并且為了確保你不會刪除Wrapper
中任何重要的文件,這里列出了組成Wrapper的文件和目錄:
gradlew (Unix Shell script)
gradlew.bat (Windows batch file)
gradle/wrapper/gradle-wrapper.jar (Wrapper JAR)
gradle/wrapper/gradle-wrapper.properties (Wrapper properties
如果你想知道Gradle distributions
存放在哪,你可以在你的用戶根目錄下的$USER_HOME/.gradle/wrapper/dists
下找到。
2. 將Wrapper添加到工程匯中
Wrapper
是必須納入版本控制的。當將wrapper配置到你的工程后,每個人都可以直接使用而不用事先安裝。更牛的是,每個使用者都可以確保使用是build
可支持的版本。當然,這對于CI
(Continuous Integration 持續集成 )的服務器(比如:常規build
你項目的服務器)也是非常有幫助的,因為不需要再server上進行配置。
通過執行Wrapper
task
(這條task
永遠是有效的,即使你沒有把它加入你的build
中),你可以安裝Wrapper
到你的工程中。在命令行中使用--gradle-version
用于指定一個Gradle
的版本。默認情況下,Wrapper
會使用bin distribution
(因為這是最小體積的Gralde distribution
)。一些IDEA
如Android Studio
和Intellij IDEA
提供了可選的環境信息,當使用all distribution
時。你可以通過使用--distribution-type
選擇不同的Gradle distribution
類型。你同樣可以使用--gradle-distribution-url
,通過設置distribution URL
直接去下載相應的Gradle。如果沒有明確版本號或者distribution URL
,the Wrapper will be configured to use the gradle version the wrapper task is executed with. 所以當你使用Gradle 2.4
去run Warapper task
,Wrapper configuration
就會被默認為2.4版本。
其實上面教的如何在工程中添加
Wrapper
,我們是不用管的。
因為AS
工程建立時默認就把第1節的4個文件包含進來了,不需要自己搭環境去拉取。
二. ?Wrapper(與上面完全不同,這個Wrapper
只表示Gradle
的一個Task
,只翻譯第一段)
這個Task
的作用是:生成一些腳本(Linux/Unix 和 windows
),可以讓你使用Gradle
去build
你的工程,而無需事先安裝Gradle
。
當用戶執行第一次執行wrapper
腳本時,腳本會下載相應的Gradle distribution
并且使用下載后的distribution
去執行build
操作。當使用wrapper
腳本時,任何已經安裝的Gradle distribution
將會被忽略。
通過該Task
生成的的腳本,應該被包含到版本控制系統中。該Task
生成的名為gradle-wrapper.jar
的小的引導JAR
和屬性文件,同樣需要包含到版本控制系統中。這些腳本就是JAR
的代理。
這個文檔是
Gradle
的官方文檔,講述Wrapper
這個Task
的作用:
由該Task
生成gradlew/gradlew.bat
腳本以及gradle-wrapper.jar
和gradle-wrapper.properties
文件。
而我們在AS
的實際使用中,并不會去run
這個task
去生成上面的文件,新建一個項目時這些文件默認都會被創建。我要使用這些文件去下載相應的Gradle
,以及去build
。而不是從頭開始造車輪。