鍍金池/ 教程/ 物聯(lián)網(wǎng)/ Gradle 命令行的基本使用
問(wèn)題反饋
Gradle 插件
Scala 插件
Gradle 命令行的基本使用
任務(wù)詳述
安裝
概述
教程-雜七雜八
構(gòu)建環(huán)境
依賴(lài)管理基礎(chǔ)
使用 Gradle 圖形用戶(hù)界面
使用文件
CodeNarc 插件
Sonar 插件
Groovy 插件
Sonar Runner 插件
OSGi 插件
Ear 插件
Gradle 守護(hù)進(jìn)程
Java 插件
簡(jiǎn)介
構(gòu)建基礎(chǔ)
FindBugs 插件
Groovy 快速入門(mén)
JaCoCo 插件
PMD 插件
War 插件
Checkstyle 插件
日志
Java 構(gòu)建入門(mén)
Jetty 插件
從 Gradle 中調(diào)用 Ant
標(biāo)準(zhǔn)的 Gradle 插件
Web 工程構(gòu)建
JDepend 插件
編寫(xiě)構(gòu)建腳本

Gradle 命令行的基本使用

本章介紹了命令行的基本使用。正如在前面的章節(jié)里你所見(jiàn)到的調(diào)用 gradle 命令來(lái)完成一些功能。

多任務(wù)調(diào)用

你可以以列表的形式在命令行中一次調(diào)用多個(gè)任務(wù)。例如 gradle compile test 命令會(huì)依次調(diào)用,并且每個(gè)任務(wù)僅會(huì)被調(diào)用一次。compile 和 test 任務(wù)以及它們的依賴(lài)任務(wù)。無(wú)論它們是否被包含在腳本中:即無(wú)論是以命令行的形式定義的任務(wù)還是依賴(lài)于其它任務(wù)都會(huì)被調(diào)用執(zhí)行。來(lái)看下面的例子。

下面定義了四個(gè)任務(wù)。dist 和 test 都依賴(lài)于 compile,只用當(dāng) compile 被調(diào)用之后才會(huì)調(diào)用 gradle dist test 任務(wù)。

任務(wù)依賴(lài)

http://wiki.jikexueyuan.com/project/gradle/images/1-1.png" alt="" />

多任務(wù)調(diào)用

build.gradle

task compile << {
    println 'compiling source'
}
task compileTest(dependsOn: compile) << {
    println 'compiling unit tests'
}
task test(dependsOn: [compile, compileTest]) << {
    println 'running unit tests'
}
task dist(dependsOn: [compile, test]) << {
    println 'building the distribution'
}

gradle dist test 的輸出結(jié)果。

\> gradle dist test
:compile
compiling source
:compileTest
compiling unit tests
:test
running unit tests
:dist
building the distribution
BUILD SUCCESSFUL
Total time: 1 secs

由于每個(gè)任務(wù)僅會(huì)被調(diào)用一次,所以調(diào)用 gradle test test 與調(diào)用 gradle test 效果是相同的。

排除任務(wù)

你可以用命令行選項(xiàng) -x 來(lái)排除某些任務(wù),讓我們用上面的例子來(lái)示范一下。

排除任務(wù)

gradle dist -x test 的輸出結(jié)果。

\> gradle dist -x test
:compile
compiling source
:dist
building the distribution
BUILD SUCCESSFUL
Total time: 1 secs

可以看到,test 任務(wù)并沒(méi)有被調(diào)用,即使他是 dist 任務(wù)的依賴(lài)。同時(shí) test 任務(wù)的依賴(lài)任務(wù) compileTest 也沒(méi)有被調(diào)用,而像 compile 被 test 和其它任務(wù)同時(shí)依賴(lài)的任務(wù)仍然會(huì)被調(diào)用。

失敗后繼續(xù)執(zhí)行

默認(rèn)情況下只要有任務(wù)調(diào)用失敗 Gradle 就是中斷執(zhí)行。這可能會(huì)使調(diào)用過(guò)程更快,但那些后面隱藏的錯(cuò)誤不會(huì)被發(fā)現(xiàn)。所以你可以使用--continue 在一次調(diào)用中盡可能多的發(fā)現(xiàn)所有問(wèn)題。

采用了--continue 選項(xiàng),Gralde會(huì)調(diào)用每一個(gè)任務(wù)以及它們依賴(lài)的任務(wù)。而不是一旦出現(xiàn)錯(cuò)誤就會(huì)中斷執(zhí)行。所有錯(cuò)誤信息都會(huì)在最后被列出來(lái)。

一旦某個(gè)任務(wù)執(zhí)行失敗,那么所有依賴(lài)于該任務(wù)的子任務(wù)都不會(huì)被調(diào)用。例如由于 test 任務(wù)依賴(lài)于 complie 任務(wù),所以如果 compile 調(diào)用出錯(cuò),test 便不會(huì)被直接或間接調(diào)用。

簡(jiǎn)化任務(wù)名

當(dāng)你試圖調(diào)用某個(gè)任務(wù)的時(shí)候,無(wú)需輸入任務(wù)的全名。只需提供足夠的可以唯一區(qū)分出該任務(wù)的字符即可。例如,上面的例子你也可以這么寫(xiě)。用 gradle di 來(lái)直接調(diào)用 dist 任務(wù)。

簡(jiǎn)化任務(wù)名

gradle di 的輸出結(jié)果

\> gradle di
:compile
compiling source
:compileTest
compiling unit tests
:test
running unit tests
:dist
building the distribution
BUILD SUCCESSFUL
Total time: 1 secs

你也可以用駝峰命名的任務(wù)中每個(gè)單詞的首字母進(jìn)行調(diào)用。例如,可以執(zhí)行 gradle compTest or even gradle cT 來(lái)調(diào)用 compileTest 任務(wù)。

簡(jiǎn)化駝峰任務(wù)名

gradle cT 的輸出結(jié)果。

\> gradle cT
:compile
compiling source
:compileTest
compiling unit tests
BUILD SUCCESSFUL
Total time: 1 secs

簡(jiǎn)化后你仍然可以使用 -x 參數(shù)。

選擇構(gòu)建位置

調(diào)用 gradle 時(shí),默認(rèn)情況下總是會(huì)構(gòu)建當(dāng)前目錄下的文件,可以使用-b 參數(shù)選擇構(gòu)建的文件,并且當(dāng)你使用此參數(shù)時(shí)settings。gradle 將不會(huì)生效,看下面的例子:

選擇文件構(gòu)建

subdir/myproject.gradle

task hello << {
    println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."
}

gradle -q -b subdir/myproject.gradle hello 的輸出結(jié)果

Output of gradle -q -b subdir/myproject.gradle hello
\> gradle -q -b subdir/myproject.gradle hello
using build file 'myproject.gradle' in 'subdir'.

另外,你可以使用 -p 參數(shù)來(lái)指定構(gòu)建的目錄,例如在多項(xiàng)目構(gòu)建中你可以用 -p 來(lái)替代 -b 參數(shù)。

選擇構(gòu)建目錄

gradle -q -p subdir hello 的輸出結(jié)果

\> gradle -q -p subdir hello
using build file 'build.gradle' in 'subdir'.

獲取構(gòu)建信息

Gradle 提供了許多內(nèi)置任務(wù)來(lái)收集構(gòu)建信息。這些內(nèi)置任務(wù)對(duì)于了解依賴(lài)結(jié)構(gòu)以及解決問(wèn)題都是很有幫助的。

了解更多,可以參閱項(xiàng)目報(bào)告插件以為你的項(xiàng)目添加構(gòu)建報(bào)告。

項(xiàng)目列表

執(zhí)行 gradle projects 會(huì)為你列出子項(xiàng)目名稱(chēng)列表。如下例。

收集項(xiàng)目信息

gradle -q projects 的輸出結(jié)果

\> gradle -q projects
\------------------------------------------------------------
Root project
\------------------------------------------------------------
Root project 'projectReports'
+--- Project ':api' - The shared API for the application
\--- Project ':webapp' - The Web application implementation
To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :api:tasks

這份報(bào)告展示了每個(gè)項(xiàng)目的描述信息。當(dāng)然你可以在項(xiàng)目中用 description 屬性來(lái)指定這些描述信息。

為項(xiàng)目添加描述信息.

build.gradle

description = 'The shared API for the application'

任務(wù)列表

執(zhí)行 gradle tasks 會(huì)列出項(xiàng)目中所有任務(wù)。這會(huì)顯示項(xiàng)目中所有的默認(rèn)任務(wù)以及每個(gè)任務(wù)的描述。如下例

獲取任務(wù)信息

gradle -q tasks的輸出結(jié)果:

\> gradle -q tasks
\------------------------------------------------------------
All tasks runnable from root project
\------------------------------------------------------------
Default tasks: dists
Build tasks
\-----------
clean - Deletes the build directory (build)
dists - Builds the distribution
libs - Builds the JAR
Build Setup tasks
\-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]
Help tasks
\----------
dependencies - Displays all dependencies declared in root project 'projectReports'.
dependencyInsight - Displays the insight into a specific dependency in root project 'projectReports'.
help - Displays a help message
projects - Displays the sub-projects of root project 'projectReports'.
properties - Displays the properties of root project 'projectReports'.
tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects).
To see all tasks and more detail, run with --all.

默認(rèn)情況下,這只會(huì)顯示那些被分組的任務(wù)。你可以通過(guò)為任務(wù)設(shè)置 group 屬性和 description 來(lái)把 這些信息展示到結(jié)果中。

更改任務(wù)報(bào)告內(nèi)容

build.gradle

dists {
    description = 'Builds the distribution'
    group = 'build'
}

當(dāng)然你也可以用--all 參數(shù)來(lái)收集更多任務(wù)信息。這會(huì)列出項(xiàng)目中所有任務(wù)以及任務(wù)之間的依賴(lài)關(guān)系。

Obtaining more information about tasks

gradle -q tasks --all的輸出結(jié)果:

\> gradle -q tasks --all
\------------------------------------------------------------
All tasks runnable from root project
\------------------------------------------------------------
Default tasks: dists
Build tasks
\-----------
clean - Deletes the build directory (build)
api:clean - Deletes the build directory (build)
webapp:clean - Deletes the build directory (build)
dists - Builds the distribution [api:libs, webapp:libs]
    docs - Builds the documentation
api:libs - Builds the JAR
    api:compile - Compiles the source files
webapp:libs - Builds the JAR [api:libs]
    webapp:compile - Compiles the source files
Build Setup tasks
\-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]
Help tasks
\----------
dependencies - Displays all dependencies declared in root project 'projectReports'.
dependencyInsight - Displays the insight into a specific dependency in root project 'projectReports'.
help - Displays a help message
projects - Displays the sub-projects of root project 'projectReports'.
properties - Displays the properties of root project 'projectReports'.
tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects).

獲取任務(wù)幫助信息

執(zhí)行 gradle help --task someTask 可以顯示指定任務(wù)的詳細(xì)信息?;蛘叨囗?xiàng)目構(gòu)建中相同任務(wù)名稱(chēng)的所有任務(wù)的信息。如下例。

獲取任務(wù)幫助

gradle -q help --task libs 的輸出結(jié)果

\> gradle -q help --task libs
Detailed task information for libs
Paths
     :api:libs
     :webapp:libs
Type
     Task (org.gradle.api.Task)
Description
     Builds the JAR

這些結(jié)果包含了任務(wù)的路徑、類(lèi)型以及描述信息等。

獲取依賴(lài)列表

執(zhí)行 gradle dependencies 會(huì)列出項(xiàng)目的依賴(lài)列表,所有依賴(lài)會(huì)根據(jù)任務(wù)區(qū)分,以樹(shù)型結(jié)構(gòu)展示出來(lái)。如下例。

獲取依賴(lài)信息

gradle -q dependencies api:dependencies webapp:dependencies 的輸出結(jié)果

\> gradle -q dependencies api:dependencies webapp:dependencies
\------------------------------------------------------------
Root project
\------------------------------------------------------------
No configurations
\------------------------------------------------------------
Project :api - The shared API for the application
\------------------------------------------------------------
compile
\--- org.codehaus.groovy:groovy-all:2.2.0
testCompile
\--- junit:junit:4.11
     \--- org.hamcrest:hamcrest-core:1.3
\------------------------------------------------------------
Project :webapp - The Web application implementation
\------------------------------------------------------------
compile
+--- project :api
|    \--- org.codehaus.groovy:groovy-all:2.2.0
\--- commons-io:commons-io:1.2
testCompile
No dependencies

雖然輸出結(jié)果很多,但這對(duì)于了解構(gòu)建任務(wù)十分有用,當(dāng)然你可以通過(guò)--configuration 參數(shù)來(lái)查看 指定構(gòu)建任務(wù)的依賴(lài)情況。

過(guò)濾依賴(lài)信息

gradle -q api:dependencies --configuration testCompile 的輸出結(jié)果

\> gradle -q api:dependencies --configuration testCompile
\------------------------------------------------------------
Project :api - The shared API for the application
\------------------------------------------------------------
testCompile
\--- junit:junit:4.11
     \--- org.hamcrest:hamcrest-core:1.3

查看特定依賴(lài)

執(zhí)行 Running gradle dependencyInsight 可以查看指定的依賴(lài)情況。如下例。

獲取特定依賴(lài)

gradle -q webapp:dependencyInsight --dependency groovy --configuration compile 的輸出結(jié)果

\> gradle -q webapp:dependencyInsight --dependency groovy --configuration compile
org.codehaus.groovy:groovy-all:2.2.0
\--- project :api
     \--- compile

這對(duì)于了解依賴(lài)關(guān)系、了解為何選擇此版本作為依賴(lài)十分有用。了解更多請(qǐng)參閱依賴(lài)檢查報(bào)告

dependencyInsight 任務(wù)是'Help'任務(wù)組中的一個(gè)。這項(xiàng)任務(wù)需要進(jìn)行配置才可以。如果用了 Java 相關(guān)的插件,那么 dependencyInsight 任務(wù)已經(jīng)預(yù)先被配置到'Compile'下了。你只需要通過(guò)'--dependency'參數(shù)來(lái)制定所需查看的依賴(lài)即可。如果你不想用默認(rèn)配置的參數(shù)項(xiàng)你可以通過(guò) '--configuration' 參數(shù)來(lái)進(jìn)行指定。了解更多請(qǐng)參閱依賴(lài)檢查報(bào)告。

獲取項(xiàng)目屬性列表

執(zhí)行 gradle properties 可以獲取項(xiàng)目所有屬性列表。如下例。

屬性信息

gradle -q api:properties 的輸出結(jié)果

\> gradle -q api:properties
\------------------------------------------------------------
Project :api - The shared API for the application
\------------------------------------------------------------
allprojects: [project ':api']
ant: org.gradle.api.internal.project.DefaultAntBuilder@12345
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@12345
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler@12345
asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@12345
buildDir: /home/user/gradle/samples/userguide/tutorial/projectReports/api/build
buildFile: /home/user/gradle/samples/userguide/tutorial/projectReports/api/build.gradle

構(gòu)建日志

--profile 參數(shù)可以收集一些構(gòu)建期間的信息并保存到 build/reports/profile 目錄下并且以構(gòu)建時(shí)間命名這些文件。

下面這份日志記錄了總體花費(fèi)時(shí)間以及各過(guò)程花費(fèi)的時(shí)間,并以時(shí)間大小倒序排列,并且記錄了任務(wù)的執(zhí)行情況。

如果采用了 buildSrc,那么在 buildSrc/build 下同時(shí)也會(huì)生成一份日志記錄記錄。

http://wiki.jikexueyuan.com/project/gradle/images/2-2.png" alt="" />

Dry Run

有時(shí)可能你只想知道某個(gè)任務(wù)在一個(gè)任務(wù)集中按順序執(zhí)行的結(jié)果,但并不想實(shí)際執(zhí)行這些任務(wù)。那么你可以用-m 參數(shù)。例如 gradle -m clean compile 會(huì)調(diào)用 clean 和 compile,這與 tasks 可以形成互補(bǔ),讓你知道哪些任務(wù)可以用于執(zhí)行。

本章小結(jié)

在本章中你學(xué)到很多用命令行可以做的事情,了解更多你可以參閱 gradle command in 附錄 D, Gradle 命令行。

上一篇:Sonar Runner 插件下一篇:JDepend 插件