翻譯自:原文。
大多數(shù)的開發(fā)者在使用Gralde
時(shí)都選擇使用Gradle Wrapper
。這非常好,因?yàn)槭褂?code>Gradle Wrapper意味著開發(fā)者可以將自己的精力集中到工程開發(fā)中,而非在維護(hù)Gradle安裝相關(guān)。由于wrapper
的使用非常廣泛,去準(zhǔn)確理解哪些是wrapper
可以做的,哪些是不能做的,就顯得非常的有必要。
如果你不使用Wrapper
如果你還沒有使用wrapper
,那么你真應(yīng)該現(xiàn)在就使用! 使用wrapper
可以保證你團(tuán)隊(duì)中的每個(gè)開發(fā)者使用同一版本的Gradle
,并且使用它進(jìn)行各種build(即使他們已經(jīng)安裝了Gradle在自己的電腦上)
開始非常簡單,首先安裝Gradle
到你的電腦上,然后通過命令行打開你的工程所在目錄。Run
gradlw wrapper
,然后就可以了! 當(dāng)然,你可以添加 --gradle-version X.Y
參數(shù)去明確你要使用的Gradle的版本。
現(xiàn)在你可以在你的工程根目錄,使用 gradlew shell script
或者bat file
去run
任何Gralde task
。
什么是Gradle Wrapper
Gradle Wrapper
由項(xiàng)目目錄下的一系列文件組成:
-
gradlew
:Unix/Linux
用戶可用來執(zhí)行Gradle tasks
的shell script
-
gradlew.bat
:Windows
用戶可用來執(zhí)行Gradle tasks
的bat script
-
gradle/wrapper/gradle-wrapper.jar
:wrapper
的可執(zhí)行JAR
;wrapper
代碼的存放處 -
gradle/wrapper/gradle-wrapper.properties
:是一個(gè)屬性文件,用于配置wrapper
你需要確保如上內(nèi)容全部包含在版本控制系統(tǒng)中。它們都是文本體積小的,系統(tǒng)獨(dú)立的并且是你想要使用Gralde Wrapper
時(shí)所必需的一些文件。
Gradle Wrapper能做什么
當(dāng)你run
Gradle Wrapper
時(shí),它會(huì)執(zhí)行如下動(dòng)作:
- 解析傳給
gradlew
的參數(shù) - 安裝正確版本的
Gradle
- 調(diào)用
Gradle
去執(zhí)行相應(yīng)的tasks
需要注意的是wrapper
只接受兩個(gè)可選參數(shù):
-q
或者--quiet
用于控制輸出-g
或者--gradle-user-home
用于為Gralde
另外指定一個(gè)home directory
Gradle
的安裝步驟可能是唯一值得特別關(guān)注的地方了吧。首先,wrapper
會(huì)去檢查GRADLE_USER_HOME
路徑下是否有我們想要的Gradle distribution
。如果已經(jīng)存在,wrapper
就會(huì)繼續(xù)去調(diào)用Gradle
。如果distribution
不存在,wrapper
就會(huì)去下載它。
同樣值得的注意的是,wrapper
會(huì)完全無視你電腦中任何其他的Gradle distribution
。Wrapper
只會(huì)下載并解壓Gradle distribution
到自己單獨(dú)的目錄中,并且只會(huì)使用它們?nèi)?code>build。Wrapper
可以使用任何全局的Gradle
配置文件(will use any global Gradle configuration)比如gradle.properties
去定義你的Gradle home directory
,當(dāng)你執(zhí)行tasks
時(shí)。
Gradle Wrapper不做什么
Gradle Wrapper
本身不會(huì)去執(zhí)行你的tasks
。它所做的只是確保你可以得到你想到的Gradle distribution
,然后去調(diào)用它。Wrapper
可以理解為一個(gè)薄層,過濾掉了開發(fā)者們需要自己去維護(hù)distributions
的這個(gè)需求。
這意味著wrapper
非常有效率地與Gradle
本身解耦了。一個(gè)2014年的wrapper
可以build
一個(gè)使用Gralde 4.0
的工程;同樣地,一個(gè)今天安裝的wrapper
也可以build
一個(gè)使用Gradle 2.0
的工程。
如果你在build
時(shí)遇到問題,這幾乎不大可能是wrapper
的問題,因?yàn)樗皇羌兇獾卣{(diào)用相應(yīng)的Gradle
。
Wrapper的配置
我之前已經(jīng)提到過工程里的一個(gè)wrapper文件,即配置文件radle/wrapper/gradle-wrapper.properties
文件的內(nèi)容類似如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-all.zip
distributionBase
+ distributionPath
明確了wrapper
存放Gradle distributions
的目標(biāo)路徑。默認(rèn) GRADLE_USER_HOME
指向的是 ~/.gradle (Unix/Linux)
或者 C:\Users\<username>\.gradle (Windows)
。所以wrapper
會(huì)將Gradle distributions
存儲(chǔ)在 ~/.gradle/wrapper/dists (Linux/Unix)
或者 C:\Users\<username>\.gradle\wrapper\dists (Windows)
目錄下。
zipStoreBase
和zipStorePath
同上非常相似。它們明確了wrapper
所下載的壓縮的distributions
存放的路徑。
distributionUrl
應(yīng)該是你最應(yīng)該關(guān)心的。這是用于聲明你想用哪個(gè)版本的Gradle
并且從哪里去下載它。
更新
正因?yàn)?code>wrapper是獨(dú)立于具體的用于編譯你的工程的Gradle distribution
,你應(yīng)該怎樣或者何時(shí)更新它?
正如wrapper
官方文檔所言:
如果你想切換到一個(gè)新版本的
Gradle
,你無須重新執(zhí)行Wrapper
這個(gè)task
,只需更改gradle-wrapper.properties
文件下的相應(yīng)條目。
但是如果你想使用Gradle Wrapper
中最新的功能,那么你需要重新生成wrapper
文件。
你需要保證你的Gradle distribution
盡可能地最新,只需簡單的修改gradle-wrapper.properties
文件中的distributionUrl
的值即可。
一般情況下你不需要更新Gradle Wrapper
,但是你可以在Gradle
更新過后re-running
gradle wrapper
這個(gè)task
來實(shí)現(xiàn)。你也可以使用wrapper
的gradlew wrapper
這個(gè)task
,which has the benefit of using the wrapper’s Gradle distribution.(一段廢話。。)。Wrapper
更新后沒有什么壞處,但別指望會(huì)有什么 crazy new features
添加進(jìn)來,因?yàn)樽?014年以來并沒有什么實(shí)際意義上的重要更新(除非你樂忠于seeing fewer dots(不知道什么意思))
Android開發(fā)者 需要意識(shí)到:Gradle
的版本(大多數(shù)情況下)是獨(dú)立于Android plugin
的版本和你所使用的Android Studio
的版本。新版本的plugin
或者AS
也許會(huì)要求更新Gradle
版本,但是對于老版本的plugin
和AS
使用新版本的Gradle
并不會(huì)有什么問題。