【譯】Understanding the Gradle Wrapper

翻譯自:原文

大多數(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 filerun任何Gralde task

什么是Gradle Wrapper

Gradle Wrapper由項(xiàng)目目錄下的一系列文件組成:

  • gradlewUnix/Linux用戶可用來執(zhí)行Gradle tasksshell script
  • gradlew.batWindows用戶可用來執(zhí)行Gradle tasksbat script
  • gradle/wrapper/gradle-wrapper.jarwrapper的可執(zhí)行JARwrapper代碼的存放處
  • 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)作:

  1. 解析傳給gradlew的參數(shù)
  2. 安裝正確版本的Gradle
  3. 調(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 distributionWrapper只會(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)目錄下。

zipStoreBasezipStorePath同上非常相似。它們明確了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)。你也可以使用wrappergradlew 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版本,但是對于老版本的pluginAS使用新版本的Gradle并不會(huì)有什么問題。

Further reading

GitHub上的Gradle Wrapper源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容