前言
這三個知識點不難撩银,但經(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)建項目時缚去,其工作流程如下:
- 檢查規(guī)定的Gradle版本,如果沒有則去服務器下載琼开。
- 下載的Gradle版本存儲在Gradle的用戶目錄中病游。如macOS中默認存儲所有的Gradle版本到
/Users/yourname/.gradle/wrapper/dists/
中。 - 使用解壓后的Gradle版本來構(gòu)建項目稠通。
添加Wrapper
使用命令行添加Wrapper有兩種方式:
- 使用
gradle init
創(chuàng)建新項目衬衬,則會初始化一個帶有Wrapper的Gradle項目。 - 使用
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
- 命令行方法碾篡。
.gradlew wrapper --gradle-version [要更新的版本號]
。 - 修改
gradle/wrapper/gradle-wrapper.properties
中的distributionUrl
屬性筏餐。
Gradle命令行
與Gradle交互有兩種方式开泽,一是命令行界面,二是IDE的圖形界面魁瞪,如Android Studio穆律。IDE方式各有不同且未必包括所有的命令行指令,但命令行方式卻是不變的导俘,因此需要學會基本的命令行指令峦耘,以不變應萬變。
注意:在項目中使用命令行方式時旅薄,推薦使用
./gradlew
orgradlew.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
-
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)先級從高往低祷安,列出如下:
- 命令行姥芥。
-
GRADLE_USER_HOME
目錄中的gradle.properties
文件。 - 項目根目錄中的
gradle.properties
文件辆憔。 - 環(huán)境變量撇眯。運行Gradle環(huán)境的變量,如JAVA_HOME等虱咧。
配置環(huán)境其實是設置各種屬性參數(shù)熊榛,以上四種方式對于某些屬性都可以配置。其中命令行和gradle.properties
文件方式支持所有屬性的配置腕巡。屬性有不同的級別玄坦,按照優(yōu)先級從高到底列出如下:
- 系統(tǒng)屬性(System properties)。
- Gradle屬性绘沉。
系統(tǒng)屬性
用于設置Gradle的JVM環(huán)境煎楣。
- 命令行方式。通過給屬性添加
-D
前綴來設置车伞。如gradle -Dgradle.user.home=foo
-
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