Gradle 安裝 & 命令行選項(xiàng)

系統(tǒng)學(xué)習(xí) Gradle ,不局限于Android 俗扇,學(xué)習(xí)《實(shí)戰(zhàn)Gradle》并簡(jiǎn)要記錄

1 安裝

直接參考 Gradle主頁(yè) 安裝方式驶社,安裝即可奔脐!

兩種安裝方式:

1.1 Install with a package manager (使用 包管理器 安裝)

對(duì)于Mac系統(tǒng),需要先安裝 Homebrew 星澳,然后在使用下面的命令 安 Gradle

$ brew install gradle

運(yùn)行之后疚顷,提示如下信息(偶然性),需要升級(jí) Xcode 版本禁偎,或者 干掉它腿堤。


之前的版本太低了,Homebrew 的版本需要更新

需要升級(jí) Xcode

刪掉還是升級(jí)如暖,任選一種吧笆檀,處理之后:
正常安裝

驗(yàn)證安裝是否成功

$ gradle -v

查詢結(jié)果如下,表示安裝成功


安裝成功
1.2 Install manually(手動(dòng)安裝)

參考官網(wǎng)盒至,本文采取第一種安裝方式

2 命令行選項(xiàng)

gradle 命令允許同時(shí)定義一個(gè)或多個(gè)命令行選項(xiàng)
比如下文要提到的 -i 和 -s 選項(xiàng)酗洒,就可以合并為 -is 或 -i -s

本文將介紹 最重要的10個(gè)命令行選項(xiàng),并進(jìn)行簡(jiǎn)單分類:

  • 日志選項(xiàng) 3個(gè) 枷遂,-i / -s / -q
  • 參數(shù)選項(xiàng) 2個(gè)樱衷,-D / -P
  • 幫助任務(wù) 2個(gè) ,tasks / properties
  • 其它選項(xiàng)3個(gè), -? / -b / --offline

日志選項(xiàng) (-i / -s / -q)

2.1 開(kāi)始使用 Gradle 酒唉,并使用 -q 命令行選項(xiàng)

創(chuàng)建腳本文件矩桂,然后運(yùn)行。
Gradle 構(gòu)建腳本默認(rèn)名字是 build.gradle

2.1.1 在對(duì)應(yīng)路徑下黔州,創(chuàng)建腳本文件耍鬓,從 Hello World 開(kāi)始
創(chuàng)建腳本文件

腳本語(yǔ)言是Groovy(Gradle的通用語(yǔ)言),其中 task 和 action (doLast 就是一個(gè) action)是這門語(yǔ)言(Gradle就是Groovy)的重要元素流妻!

task helloWorld{
    doLast{
        println 'hello world !'
    }
}

<< 可以簡(jiǎn)單代表 doLast 牲蜀,上述代碼可簡(jiǎn)化為:

task helloWorld << {
        println 'hello world !'
}
2.1.2 運(yùn)行腳本
gradle -q helloworld

<< 替換 doLast 后的兩次運(yùn)行結(jié)果一致,如下:


運(yùn)行結(jié)果

去掉 -q 命令行選項(xiàng)绅这,打印的信息如下:


去掉 -q 命令行選項(xiàng)
  1. doLast 是 task 執(zhí)行的最后一個(gè) action 涣达,可用 << 簡(jiǎn)單代表
  2. 通過(guò) -q 命令行選項(xiàng) 使其只輸出該task相關(guān)的信息。同 --quiet 命令行選項(xiàng)
gradle --quiet helloworld
-q 命令行選項(xiàng) 等同于 --quiet 命令行選項(xiàng)

2.2 命令行選項(xiàng) -i 证薇, --info

默認(rèn)設(shè)置中不會(huì)提供大量的輸出信息度苔,如果想知道構(gòu)建中發(fā)生了什么,
日志級(jí)別改到 INFO 浑度,可以獲取到更多信息

效果展示

2.3 命令行選項(xiàng) -s 寇窑, --stacktrace

-s 選項(xiàng)在有異常拋出時(shí)會(huì)打印出簡(jiǎn)短的堆棧跟蹤信息,以幫助進(jìn)行調(diào)試
將腳本故意多寫一個(gè)大括號(hào)箩张,以測(cè)試 -s 選項(xiàng)

task helloWorld << {
        println 'hello world !'
}
}

對(duì)比未使用 -s 和使用時(shí)的區(qū)別:

未使用 -s

使用 -s 選項(xiàng)甩骏,第一頁(yè)

使用 -s 選項(xiàng)窗市,最后一頁(yè)

可以看到詳細(xì)的堆棧信息(中間的沒(méi)有截圖,太多了)

參數(shù)選項(xiàng) (-D / -P)

2.4 命令行選項(xiàng) -D 饮笛, --system-prop

Gradle 是以一個(gè) JVM進(jìn)程運(yùn)行的咨察,和所有的 Java 進(jìn)程一樣,可以提供一個(gè)系統(tǒng)參數(shù)福青。

-D, --system-prop         Set system property of the JVM (e.g. -Dmyprop=myvalue).

2.5 命令行選項(xiàng) -P , --project-prop

項(xiàng)目參數(shù)是構(gòu)建腳本中可用的變量摄狱,可以使用這個(gè)選項(xiàng)直接向構(gòu)建腳本中傳入?yún)?shù)

-P, --project-prop        Set project property for the build script (e.g. -Pmyprop=myvalue).

幫助任務(wù) (tasks / properties)

2.6 命令行選項(xiàng) tasks

顯示項(xiàng)目中所有可運(yùn)行的task,包括它們的描述信息无午。
項(xiàng)目中應(yīng)用的插件可能會(huì)提供一些額外的task媒役。


效果展示

2.7 命令行選項(xiàng) properties

顯示出項(xiàng)目中所有可用的屬性。

jake@bogon:~/Documents/gradleTest$     gradle properties

> Task :properties

------------------------------------------------------------
Root project
------------------------------------------------------------

allprojects: [root project 'gradleTest']
ant: org.gradle.api.internal.project.DefaultAntBuilder@1a8f065b
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@5cdd0183
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@5e0ed76
asDynamicObject: DynamicObject for root project 'gradleTest'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@7dfd9b3b
buildDir: /Users/jake/Documents/gradleTest/build
buildFile: /Users/jake/Documents/gradleTest/build.gradle
buildPath: :
buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@1f22e701
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@2b473c7f
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@294eef3c
components: SoftwareComponentInternal set
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@387b9d6d
configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@30e97f8c
configurations: configuration container
convention: org.gradle.api.internal.plugins.DefaultConvention@225f192a
defaultTasks: []
deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@7cb62552
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@18425f5c
dependencyLocking: org.gradle.internal.locking.DefaultDependencyLockingHandler_Decorated@632c46c7
depth: 0
description: null
displayName: root project 'gradleTest'
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@396085c1
extensions: org.gradle.api.internal.plugins.DefaultConvention@225f192a
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@74b1ab0a
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@7e83a27f
gradle: build 'gradleTest'
group:
helloWorld: task ':helloWorld'
identityPath: :
inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@7f18d916
layout: org.gradle.api.internal.file.DefaultProjectLayout@426b15b9
listenerBuildOperationDecorator: org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator@3b7b0f05
logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@48044c24
logging: org.gradle.internal.logging.services.DefaultLoggingManager@5808d24f
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@61616031
modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@15fbb562
module: org.gradle.api.internal.artifacts.ProjectBackedModule@7d30806e
name: gradleTest
normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@7bbd6779
objects: org.gradle.api.internal.model.DefaultObjectFactory@18dd5c2c
parent: null
parentIdentifier: null
path: :
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@6597fd2
plugins: [org.gradle.api.plugins.HelpTasksPlugin@6cd3e7c0]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@74b1ab0a
project: root project 'gradleTest'
projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@7c45c38c
projectDir: /Users/jake/Documents/gradleTest
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@e0bcc14
projectPath: :
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@43e185e8
properties: {...}
providers: org.gradle.api.internal.provider.DefaultProviderFactory@76c75cee
repositories: repository container
resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@30ff87b3
resources: org.gradle.api.internal.resources.DefaultResourceHandler@62f46b83
rootDir: /Users/jake/Documents/gradleTest
rootProject: root project 'gradleTest'
script: false
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@32cf70a5
scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@7d4e6dd1
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@31c0afd4
services: ProjectScopeServices
standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@5808d24f
state: project state 'EXECUTED'
status: release
subprojects: []
tasks: task set
version: unspecified

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

其它選項(xiàng) (-? / -b / --offline)

2.8 命令行選項(xiàng) -指厌? , -h , --help

打印出所有可用的命令行選項(xiàng)刊愚。包含描述信息

// 任選一個(gè)命令
gradle -?
gradle -h
gradle --help

2.9 命令行選項(xiàng) -b , --build-file

Gradle 構(gòu)建腳本的默認(rèn)命名約定是 build.gradle。
使用該命令可以執(zhí)行一個(gè)特定名字的構(gòu)建腳本踩验。

創(chuàng)建一個(gè)名為 jake.gradle 的腳本文件鸥诽,包含一個(gè)名為 test 的 task

命令結(jié)構(gòu)為: gradle -b [文件名] [任務(wù)名]

gradle -b jake.gradle  test
運(yùn)行結(jié)果
gradle -q -b jake.gradle  test
當(dāng)然,也可以和 -q 選項(xiàng)同時(shí)使用

2.10 命令行選項(xiàng) --offline

使用該選項(xiàng)可以以離線模式運(yùn)行構(gòu)建箕憾,僅僅在本地緩存中檢查依賴是否存在牡借。
在無(wú)網(wǎng)絡(luò)且本地緩存沒(méi)有時(shí),若不使用該選項(xiàng)袭异,構(gòu)建都會(huì)失敗钠龙。


Gradle 更多,待續(xù)...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末御铃,一起剝皮案震驚了整個(gè)濱河市碴里,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌上真,老刑警劉巖咬腋,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異睡互,居然都是意外死亡根竿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門就珠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寇壳,“玉大人,你說(shuō)我怎么就攤上這事妻怎】茄祝” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵逼侦,是天一觀的道長(zhǎng)冕广。 經(jīng)常有香客問(wèn)我疏日,道長(zhǎng),這世上最難降的妖魔是什么撒汉? 我笑而不...
    開(kāi)封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮涕滋,結(jié)果婚禮上睬辐,老公的妹妹穿的比我還像新娘。我一直安慰自己宾肺,他們只是感情好溯饵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锨用,像睡著了一般丰刊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上增拥,一...
    開(kāi)封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天啄巧,我揣著相機(jī)與錄音,去河邊找鬼掌栅。 笑死秩仆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猾封。 我是一名探鬼主播澄耍,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晌缘!你這毒婦竟也來(lái)了齐莲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磷箕,失蹤者是張志新(化名)和其女友劉穎选酗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搀捷,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡星掰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫩舟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氢烘。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖家厌,靈堂內(nèi)的尸體忽然破棺而出播玖,到底是詐尸還是另有隱情,我是刑警寧澤饭于,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布蜀踏,位于F島的核電站维蒙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏果覆。R本人自食惡果不足惜颅痊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局待。 院中可真熱鬧斑响,春花似錦、人聲如沸钳榨。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)薛耻。三九已至营罢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饼齿,已是汗流浹背饲漾。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留候醒,地道東北人能颁。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像倒淫,于是被迫代替她去往敵國(guó)和親伙菊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

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