第 2 章 下一代构建工具:Gradle

2017-10-08  本文已影响0人  南北东西总相随

第 2 章 下一代构建工具:Gradle

2.5 开始使用 Gradle

每个 Gradle 构建都是以一个脚本开始的。Gradle 构建脚本默认的名字是 build.gradle

task helloWorld {
    doLast {
        println "Hello World"
    }
}

使用左移符号 << 代表 doLast

task helloWorld << {
    println "Hello World"
}

结果:

$ gradle -q helloworld
Hello World

清单 2.1 动态任务定义和任务链

task startSession << {
    chant()
}

def chant() {
    ant.echo 'Repeat after me...'
}

3.times { counter ->
    task "yayGradle$counter" << {
        println 'Gradle rocks'
    }
}

yayGradle0.dependsOn startSession
yayGradle2.dependsOn yayGradle1, yayGradle0
task groupTherapy(dependsOn: yayGradle2)

结果:

$ gradle groupTherapy
:startSession
[ant:echo] Repeat after me...
:yayGradle0
Gradle rocks
:yayGradle1
Gradle rocks
:yayGradle2
Gradle rocks
:groupTherapy

2.6 使用 Gradle 的命令行

2.6.1 列出项目中所有可用的 task

Gradle 提供了任务组的概念,你可以把它看作是多个 task 的集群。如果某个 task 不属于一个任务组,那么它就会显示在 Other tasks 中。

$ gradle -q tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
setupBuild - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Help tasks
----------
dependencies - Displays all dependencies declared in root project 'listing_02_01-dynamic-task-and-task-dependencies'.
dependencyInsight - Displays the insight into a specific dependency in root project 'listing_02_01-dynamic-task-and-task-dependencies'.
help - Displays a help message
projects - Displays the sub-projects of root project 'listing_02_01-dynamic-task-and-task-dependencies'.
properties - Displays the properties of root project 'listing_02_01-dynamic-task-and-task-dependencies'.
tasks - Displays the tasks runnable from root project 'listing_02_01-dynamic-task-and-task-dependencies'.

Other tasks
-----------
groupTherapy

使用 --all 选项获得关于 task 的更多信息

$ gradle -q tasks --all

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
setupBuild - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Help tasks
----------
dependencies - Displays all dependencies declared in root project 'listing_02_01-dynamic-task-and-task-dependencies'.
dependencyInsight - Displays the insight into a specific dependency in root project 'listing_02_01-dynamic-task-and-task-dependencies'.
help - Displays a help message
projects - Displays the sub-projects of root project 'listing_02_01-dynamic-task-and-task-dependencies'.
properties - Displays the properties of root project 'listing_02_01-dynamic-task-and-task-dependencies'.
tasks - Displays the tasks runnable from root project 'listing_02_01-dynamic-task-and-task-dependencies'.

Other tasks
-----------
groupTherapy # 依赖关系图
    startSession
    yayGradle0
    yayGradle1
    yayGradle2

2.6.2 任务执行

一次执行多个任务。任务通常只会执行一次,无论它们是在命令行中指定的还是作为另一个任务的依赖。

$ gradle yayGradle0 groupTherapy
:startSession
[ant:echo] Repeat after me...
:yayGradle0
Gradle rocks
:yayGradle1
Gradle rocks
:yayGradle2
Gradle rocks
:groupTherapy

在执行时排除一个任务

排除了任务 yayGradle0 和它的依赖任务 startSession

$ gradle groupTherapy -x yayGradle0
:yayGradle1
Gradle rocks
:yayGradle2
Gradle rocks
:groupTherapy

2.6.3 命令行选项

$ gradle -h

USAGE: gradle [option...] [task...]

-?, -h, --help          Shows this help message.
-b, --build-file        Specifies the build file.
-D, --system-prop       Set system property of the JVM (e.g. -Dmyprop=myvalue).
-i, --info              Set log level to info.
--offline               The build should operate without accessing network resources.
-P, --project-prop      Set project property for the build script (e.g. -Pmyprop=myvalue).
-q, --quiet             Log errors only.
-s, --stacktrace        Print out the stacktrace for all exceptions.
-v, --version           Print version info.
-x, --exclude-task      Specify a task to be excluded from execution.

2.6.4 Gradle 守护进程

每次初始化一个构建时,JVM 都要启动一次,Gradle 的依赖要载入到类加载器中,还要建立项目对象模型。这个过程需要花上好几秒钟。Gradle 守护进程是这个问题的救星!

守护进程以后台进程方式运行 Gradle。一旦启动,gradle 命令就会在后续的构建中重用之前创建的守护进程,以避免启动时造成的开销。

守护进程会在 3 小时空闲时间之后自动过期。

$ gradle groupTherapy --daemon

# 第一次运行的时间
Total time: 4.219 secs
$ gradle groupTherapy --daemon

# 第二次运行的时间
Total time: 1.061 secs
--daemon                Uses the Gradle daemon to run the build. Starts the daemon if not running.
--no-daemon             Do not use the Gradle daemon to run the build.
--stop                  Stops the Gradle daemon if it is running.
上一篇下一篇

猜你喜欢

热点阅读