使用
Gradle
的開發(fā)者最常問(wèn)的問(wèn)題之一便是:gradle
和gradlew
的區(qū)別?。
這兩個(gè)都是應(yīng)用在特定場(chǎng)景的 Gradle 命令。通過(guò)本篇文章你將了解到每個(gè)命令干了什么,以及如何在兩個(gè)命令中做選擇。
快速摘要
如果你正在開發(fā)的項(xiàng)目當(dāng)中已經(jīng)包含
gradlew
腳本,安啦,可以一直使用它。沒(méi)有包含的話,請(qǐng)使用gradle
命令生成這個(gè)腳本。想知道為什么嗎,請(qǐng)繼續(xù)閱讀。
gradle 命令
如果你從 Gradle 官網(wǎng)(https://gradle.org/releases)下載和安裝了 Gradle 的話,你便可以使用安裝在 bin 路徑下的 gradle 命令了。當(dāng)然你記得將該 bin 路徑添加到設(shè)備的 PATH 環(huán)境變量中。
此后,在終端上運(yùn)行gradle
的話,你會(huì)看到如下輸出:

你會(huì)注意到輸出里打印了 Gradle 的版本,它對(duì)應(yīng)著你運(yùn)行的 gradle 命令在設(shè)備中的 Gradle 安裝包版本。這聽起來(lái)有點(diǎn)廢話,但在談?wù)?gradlew 的時(shí)候需要明確這點(diǎn),這很重要。
通過(guò)這個(gè)本地安裝的 Gradle,你可以使用 gradle 命令做很多事情,包括:
-
使用
gradle init
命令創(chuàng)建一個(gè)新的 Gradle 項(xiàng)目或者使用gradle wrapper
命令創(chuàng)建 gradle wrapper 目錄及文件 -
在一個(gè) Gradle 項(xiàng)目?jī)?nèi)使用
gradle build
命令進(jìn)行 Gradle 編譯 -
通過(guò)
gradle tasks
命令查看當(dāng)前的 Gradle 項(xiàng)目中支持哪些 task
上述的命令均使用你本地安裝的 Gradle 程序,無(wú)論你安裝的是什么版本。
如果你使用的是 Windows 設(shè)備,那么 gradle 命令等同于 gradle.bat,gradlew 命令等同于 gradlew.bat,非常簡(jiǎn)單。
gradlew 命令
gradlew
命令,也被了解為Gradle wrapper
,與 gradle 命令相比它是略有不同的。它是一個(gè)打包在項(xiàng)目?jī)?nèi)的腳本,并且它參與版本控制,所以當(dāng)年復(fù)制了某項(xiàng)目將自動(dòng)獲得這個(gè)gradlew腳本。
“可那又如何?”
好吧,如果你這么想。讓我告訴你,它有很多重要的優(yōu)勢(shì)。
1. 無(wú)需本地安裝 gradle
gradlew腳本不依賴本地的 Gradle 安裝。在設(shè)備上第一次運(yùn)行的時(shí)候會(huì)從網(wǎng)絡(luò)獲取 Gradle 的安裝包并緩存下來(lái)。這使得任何人、在任何設(shè)備上,只要拷貝了這個(gè)項(xiàng)目就可以非常簡(jiǎn)單地開始編譯。
2. 配置固定的 gradle 版本
這個(gè)gradlew腳本和指定的 Gradle 版本進(jìn)行綁定。這非常有用,因?yàn)檫@意味著項(xiàng)目的管理者可以強(qiáng)制要求該項(xiàng)目編譯時(shí)應(yīng)當(dāng)使用的 Gradle 版本。
Gradle 特性并不總是互相兼容各版本的,所以使用 Gradle wrapper 可以確保項(xiàng)目每次編譯都能獲得一致性的結(jié)果。
當(dāng)然這需要編譯項(xiàng)目的人使用gradlew命令,如下是在項(xiàng)目?jī)?nèi)運(yùn)行./gradlew
的示例:

輸出和運(yùn)行gradle
命令的結(jié)果比較相似。但仔細(xì)查看你會(huì)發(fā)現(xiàn)版本不一樣,不是上面的6.8.2
而是6.6.1
。
這個(gè)差異說(shuō)重要也重要,說(shuō)不重要也不重要。
但當(dāng)使用gradlew的話可以免于擔(dān)心由于 Gradle 版本導(dǎo)致的不一致性,緣自它可以保證所有的團(tuán)隊(duì)成員以及 CI 服務(wù)端都會(huì)使用相同的 Gradle 版本來(lái)構(gòu)建這個(gè)項(xiàng)目。
另外,幾乎所有使用gradle
命令可以做的事情,你也可以使用gradlew
來(lái)完成。比如編譯一個(gè)項(xiàng)目就是./gradlew build
。
如果你愿意的話,可以拷貝示例項(xiàng)目并來(lái)試一下gradlew
。
https://github.com/tkgregory/spring-boot-api-example.git
gradle 和 gradlew 對(duì)比
至此你應(yīng)該能看到在項(xiàng)目?jī)?nèi)使用gradlew
通常是最佳選擇。確保gradlew腳本受到版本控制,這樣的話你以及其他開發(fā)者都可以收獲如上章節(jié)提到的好處。
但是,難道沒(méi)有任何情況需要使用gradle
命令了嗎?當(dāng)然有。如果你期望在一個(gè)空目錄下搭建一個(gè)新的 Gradle 項(xiàng)目,你可以使用gradle init
來(lái)完成。這個(gè)命令同樣會(huì)生成gradlew腳本。
(如下的表格簡(jiǎn)單列出兩者如何選)可以說(shuō),使用gradlew確實(shí)是 Gradle 項(xiàng)目的最佳實(shí)踐。
你想做什么? | gradle還是gradlew? |
---|---|
編譯項(xiàng)目 | gradlew |
測(cè)試項(xiàng)目 | gradlew |
項(xiàng)目?jī)?nèi)執(zhí)行其他 Gradle task | gradlew |
初始化一個(gè) Gradle 項(xiàng)目或者生成 Gradle wrapper | gradle |
審核編輯 :李倩
-
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
82987 -
腳本
+關(guān)注
關(guān)注
1文章
398瀏覽量
28458 -
gradle
+關(guān)注
關(guān)注
0文章
26瀏覽量
886
原文標(biāo)題:開發(fā)這么久,gradle 和 gradlew 啥區(qū)別、怎么選?
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
ArkUI-X應(yīng)用工程結(jié)構(gòu)說(shuō)明
VGA和DP的具體區(qū)別
私有云和公有云有什么區(qū)別
ads1258 IRTCR和IRTCT的區(qū)別是什么?
FCCSP與FCBGA都是倒裝有什么區(qū)別

評(píng)論