GradleWrapper贬丛、命令行和環(huán)境配置

前言

這三個知識點不難撩银,但經(jīng)常用到,如果不看官方文檔豺憔,有時候并不知道怎么使用额获,出現(xiàn)問題也不知道原因,所以有必要做一個總結(jié)恭应。由于每個知識點都不多抄邀,又有關(guān)聯(lián),所以放在同一節(jié)昼榛。

Gradle Wrapper

Gradle Wrapper(以下簡寫為“Wrapper”)用于管理當前項目的Gradle版本境肾,Gradle官方強烈推薦使用Wrapper構(gòu)建項目。多人協(xié)作時胆屿,必須規(guī)定項目的Gradle版本准夷,并以此版本的Gradle作為項目的構(gòu)建工具,由于每個人在本地安裝的Gradle版本可能并不一致(也沒有必要一致)莺掠,因此有必要在項目中統(tǒng)一管理Gradle版本衫嵌。

Wrapper的文件結(jié)構(gòu)如下(項目根目錄中):

├── build.gradle
├── settings.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

包括一個gradle文件和兩個可執(zhí)行的腳本文件gradlew(macOS等平臺用)和gradlew.bat(Windows平臺用)。

  • gradle-wrapper.jar彻秆。用于下載所需版本的Gradle楔绞。
  • gradle-wrapper.properties。配置Gradle的版本號唇兑、本地存儲地址等酒朵。各屬性說明請見官方文檔
  • gradlew, gradlew.bat扎附。Wrapper的執(zhí)行腳本蔫耽,用于替代gradle命令來構(gòu)建項目。

注意:gradle-wrapper.properties中有一個distributionUrl屬性留夜,用于定義Gradle版本地下載URL匙铡,如distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-all.zip,版本號后面有個“-all”碍粥,有時你也可能看到“-bin”鳖眼,是什么意思呢?"-all"表示會下載此版本Gralde的所有的資源嚼摩,包括二進制運行時文件钦讳、示例代碼和相關(guān)文檔矿瘦。“-bin”表示只下載二進制運行時文件愿卒。

Wrapper 構(gòu)建項目時缚去,其工作流程如下:

  1. 檢查規(guī)定的Gradle版本,如果沒有則去服務器下載琼开。
  2. 下載的Gradle版本存儲在Gradle的用戶目錄中病游。如macOS中默認存儲所有的Gradle版本到/Users/yourname/.gradle/wrapper/dists/中。
  3. 使用解壓后的Gradle版本來構(gòu)建項目稠通。
wrapper workflow

添加Wrapper

使用命令行添加Wrapper有兩種方式:

  1. 使用gradle init創(chuàng)建新項目衬衬,則會初始化一個帶有Wrapper的Gradle項目。
  2. 使用gradle wrapper在舊的項目中添加Wrapper改橘。

wrapper是Gradle的內(nèi)建任務

一般的IDE創(chuàng)建項目時都會自動生產(chǎn)Wrapper文件滋尉,如Android Studio。

使用Wrapper執(zhí)行任務

用Wrapper腳本替換掉gradle來執(zhí)行任務即可飞主。以macOS平臺為例狮惜,在項目根目錄下執(zhí)行./gradlew [task name]即可,如列出當前項目的所有任務碌识,項目根目錄下執(zhí)行:

$ ./gradlew tasks

更新Wrapper

有兩種方式更新Wrapper

  1. 命令行方法碾篡。.gradlew wrapper --gradle-version [要更新的版本號]
  2. 修改gradle/wrapper/gradle-wrapper.properties中的distributionUrl屬性筏餐。


Gradle命令行

與Gradle交互有兩種方式开泽,一是命令行界面,二是IDE的圖形界面魁瞪,如Android Studio穆律。IDE方式各有不同且未必包括所有的命令行指令,但命令行方式卻是不變的导俘,因此需要學會基本的命令行指令峦耘,以不變應萬變。

注意:在項目中使用命令行方式時旅薄,推薦使用./gradlew or gradlew.bat 來代替 gradle辅髓。示例中為了方便,統(tǒng)一使用gradle

命令行指令可以自定義少梁,參見declaring_and_using_command_line_options

指令形式

gradle [taskName...] [--option-name...]

說明

  • 任務名(taskName)有多個時洛口,使用空格分開,如gradle task1 task2

  • 在多項目工程中猎莲,執(zhí)行某個項目的任務時绍弟,可以用“:”將項目名添加到任務名之前,如

    $ gradle projectName:taskName
    $ gradle :projectName:taskName
    
  • 可選項(option-name)如果接收參數(shù)著洼,建議使用=拼接樟遣,如

    $ gradle task1 --console=plain
    
  • 可選項規(guī)定一個行為時,可使用--no-作為其全稱(long-form)前綴身笤,來指定它的對立行為豹悬。如

    --build-cache
    --no-build-cache
    
  • 可選項的全稱名稱常有簡寫形式 ,如

    --help
    -h
    

常見內(nèi)建(built-in)任務指令

  • gradle build液荸。生成所有的輸出瞻佛,并執(zhí)行所有的檢查。
  • gradle run娇钱。生成應用程序并執(zhí)行某些腳本或二進制文件
  • gradle check伤柄。執(zhí)行所有檢測類任務如tests、linting等
  • gradle clean文搂。刪除build文件目錄适刀。
  • gradle projects。查看項目結(jié)構(gòu)煤蹭。
  • gradle tasks笔喉。查看任務列表。查看某個任務詳細信息硝皂,可用gradle help --task someTask
  • gradle dependencies常挚。查看依賴列表。

部分常見命令行選項說明如下:

調(diào)試類

  • -?, -h, --help稽物。查看幫助信息奄毡。
  • -v,--version。查看版本信息贝或。
  • -s,--stacktrace秧倾。執(zhí)行任務時,打印棧信息傀缩。如gradle build --s

其他選項說明見官方文檔Debugging options

日志類

  • -q, --quiet那先。只打印errors類信息颗胡。
  • -i, --info羹呵。打印詳細的信息宠叼。

其他選項說明見官方文檔Logging options警儒,更多關(guān)于日志類描述請見Logging癞志。

性能類

用于優(yōu)化構(gòu)建的性能

  • --configure-on-demand,--no-configure-on-demand唁奢。是否開啟按需配置模式雾叭。
  • --build-cache, --no-build-cache夷陋。是否使用緩存料身。

其他選項說明見官方文檔Performance Options汤纸,更多關(guān)于性能優(yōu)化方面的描述請見 improving performance of Gradle builds here.

環(huán)境配置類

用于配置構(gòu)建時的環(huán)境

  • -c, --settings-file。如果不用默認的settings.gradle時芹血,可指定Setting文件贮泞。
  • -b, --build-file楞慈。指定構(gòu)建文件。
  • -Dorg.gradle.jvmargs啃擦。設置JVM參數(shù)囊蓝。

其他選項說明見官方文檔Environment options,更多關(guān)于環(huán)境配置方面的描述請見build environment


環(huán)境配置

配置構(gòu)建環(huán)境令蛉,主要配置Gradle構(gòu)建參數(shù)和對應的JVM參數(shù)聚霜,如代理策略等。其目的是為了多人協(xié)作時珠叔,保持在一致的環(huán)境下進行項目開發(fā)蝎宇。

配置環(huán)境有幾種途徑,優(yōu)先級從高往低祷安,列出如下:

  1. 命令行姥芥。
  2. GRADLE_USER_HOME目錄中的gradle.properties文件。
  3. 項目根目錄中的gradle.properties文件辆憔。
  4. 環(huán)境變量撇眯。運行Gradle環(huán)境的變量,如JAVA_HOME等虱咧。

配置環(huán)境其實是設置各種屬性參數(shù)熊榛,以上四種方式對于某些屬性都可以配置。其中命令行和gradle.properties文件方式支持所有屬性的配置腕巡。屬性有不同的級別玄坦,按照優(yōu)先級從高到底列出如下:

  1. 系統(tǒng)屬性(System properties)。
  2. Gradle屬性绘沉。

系統(tǒng)屬性

用于設置Gradle的JVM環(huán)境煎楣。

  1. 命令行方式。通過給屬性添加-D前綴來設置车伞。如gradle -Dgradle.user.home=foo
  2. gradle.properties文件方式择懂。根目錄中,為屬性添加systemProp.前綴另玖,如systemProp.gradle.wrapperUser=myuser

幾個系統(tǒng)屬性如下:

  • gradle.wrapperUser=(myuser)困曙。設置Wrapper下載Gradle版本的代理服務器的用戶名。
  • gradle.wrapperPassword=(mypassword)谦去。設置Wrapper下載Gradle版本的代理服務器的密碼慷丽。
  • gradle.user.home=(path to directory)。設置Gradle用戶目錄地址鳄哭。

Gradle屬性

Gradle屬性都有對應的命令行方式要糊,gradle.properties文件屬性和對應的命令行如下:

gradle.properties文件屬性 命令行指令
org.gradle.caching=(true,false) --build-cache, --no-build-cache
org.gradle.caching.debug=(true,false) ?
org.gradle.configureondemand=(true,false) --configure-on-demand, --no-configure-on-demand
org.gradle.console=(auto,plain,rich,verbose) --console=(auto,plain,rich,verbose)
org.gradle.daemon=(true,false) --daemon, --no-daemon
org.gradle.daemon.idletimeout=(# of idle millis) -Dorg.gradle.daemon.idletimeout=(number of milliseconds)
org.gradle.debug=(true,false) -Dorg.gradle.debug=(true,false)
org.gradle.java.home=(path to JDK home) -Dorg.gradle.java.home
org.gradle.jvmargs=(JVM arguments) -Dorg.gradle.jvmargs
org.gradle.logging.level=(quiet,warn,lifecycle,info,debug) -Dorg.gradle.logging.level=(quiet,warn,lifecycle,info,debug)或者 -q-w妆丘、-i锄俄、-d
org.gradle.parallel=(true,false) --parallel, --no-parallel
org.gradle.warning.mode=(all,none,summary) -Dorg.gradle.warning.mode=(all,none,summary) 或者--warning-mode=(all,none,summary)
org.gradle.workers.max=(max # of worker processes) --max-workers

詳細說明請見Gradle properties

另外官網(wǎng)中有項目屬性和通過項目屬性配置任務的說明局劲,這里不做描述,請見官網(wǎng)Project properties

示例-設置JVM參數(shù)

對于每個Java虛擬機進程珊膜,Gradle默認配置堆空間最大為1024MB(-Xmx1024m)容握。-Xmx1024m根據(jù)項目大小宣脉,可以修改這一參數(shù)车柠。如果使用了Gradle Daemon(org.gradle.daemon=true,默認開啟)塑猖,則配置參數(shù)如下:

org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Java虛擬機參數(shù)設置參考Java HotSpot VM Options:Java 8及以上竹祷,Java 7參考。上面的參數(shù)說明如下:

  • -Xmx[size]羊苟。設置虛擬機最大內(nèi)存空間塑陵。必須是1024的倍數(shù),且不能小于2MB蜡励,單位為k/K令花、m/M、g/G凉倚,默認值隨系統(tǒng)配置而變兼都。與XX:MaxHeapSize等價。示例80MB:

    -Xmx83886080
    -Xmx81920k
    -Xmx80m
    
  • -XX:MaxPermSize=[size]稽寒。設置持久代最大空間扮碧,持久代用于存儲常量等,如果報java.lang.OutOfMemoryError: PermGen space的異常杏糙,則需要增加這一空間慎王。

    Java虛擬機內(nèi)存劃分請見Oracle官方文檔Generations

  • -XX:-HeapDumpOnOutOfMemoryError。當拋出java.lang.OutOfMemoryError異常時宏侍,將堆內(nèi)容存儲到文件中赖淤,用于調(diào)試。

  • -Dfile.encoding=UTF-8谅河。虛擬機編碼格式咱旱。

    在參考文檔中并沒有找到``-Dfile.encoding`設置

示例-設置代理

國內(nèi)下載依賴和Google資源時有時候速度很慢,可以通過設置HTTP和HTTPS代理服務解決旧蛾。在gradle.properties中設置如下:

# http代理
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

# https代理
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost

如果沒有user和password莽龟,可以不用寫。

其他的代理參數(shù)可以參考Java文檔Networking Properties


參考

  1. Gradle官網(wǎng)-Gradle Wrapper
  2. Gradle官網(wǎng)-Command-Line Interface
  3. Gradle官網(wǎng)-Build Environment
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锨天,一起剝皮案震驚了整個濱河市毯盈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌病袄,老刑警劉巖搂赋,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赘阀,死亡現(xiàn)場離奇詭異,居然都是意外死亡脑奠,警方通過查閱死者的電腦和手機基公,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宋欺,“玉大人轰豆,你說我怎么就攤上這事〕莸” “怎么了酸休?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祷杈。 經(jīng)常有香客問我斑司,道長,這世上最難降的妖魔是什么但汞? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任宿刮,我火速辦了婚禮,結(jié)果婚禮上私蕾,老公的妹妹穿的比我還像新娘僵缺。我一直安慰自己,他們只是感情好是目,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布谤饭。 她就那樣靜靜地躺著,像睡著了一般懊纳。 火紅的嫁衣襯著肌膚如雪揉抵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天嗤疯,我揣著相機與錄音冤今,去河邊找鬼。 笑死茂缚,一個胖子當著我的面吹牛戏罢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脚囊,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼龟糕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悔耘?” 一聲冷哼從身側(cè)響起讲岁,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缓艳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體校摩,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年阶淘,在試婚紗的時候發(fā)現(xiàn)自己被綠了衙吩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡溪窒,死狀恐怖坤塞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霉猛,我是刑警寧澤尺锚,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布珠闰,位于F島的核電站惜浅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伏嗜。R本人自食惡果不足惜坛悉,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望承绸。 院中可真熱鬧裸影,春花似錦、人聲如沸军熏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荡澎。三九已至均践,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摩幔,已是汗流浹背彤委。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留或衡,地道東北人焦影。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像封断,于是被迫代替她去往敵國和親斯辰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理坡疼,服務發(fā)現(xiàn)彬呻,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評論 6 342
  • 本篇文章已授權(quán)微信公眾號 dasu_Android(大蘇)獨家發(fā)布 最近看了一本書《Android Gradle ...
    請叫我大蘇閱讀 8,589評論 8 108
  • 轉(zhuǎn)載(未找到原始鏈接) Gradle是一種構(gòu)建工具,它拋棄了基于XML的構(gòu)建腳本废岂,取而代之的是采用一種基于Gro...
    GYLEE閱讀 4,050評論 0 2
  • 說明 本文主要介紹和Gradle關(guān)系密切祖搓、相對不容易理解的配置,偏重概念介紹湖苞。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,626評論 1 62