我是靠谱客的博主 无聊香菇,最近开发中收集的这篇文章主要介绍Groovy之task语法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

任务入门

定义任务

任务属于一个Project对象,并且每个任务都可以执行task接口。定义一个新任务的最简单方式是,执行将任务名称作为其参数的任务方法:

task hello

其创建了任务,但当你执行时,它不会做任何事情。为了创建一个有用的任务,你需要添加一些动作。初学者通常会犯的一个错误是像下面这样创建任务:

task  hello{
    println 'Hello , world!'
}

当你执行该任务时,会看到输出如下:

$  gradlew hello
Hello , world!
:hello

从输出来看,你可能觉得该任务运行了,但实际上,“Hello , world!”在执行该任务之前就已经被打印出来了。

原因就是,在任意Gradle构建中,都有三个阶段:初始化阶段、配置阶段和执行阶段。而上述的任务则是设置了任务的配置。

如果你想在执行阶段给一个任务添加动作,则应该使用下面的表示法:

task hello << {
    println 'Hello , world'
}

唯一的不同就是closure之前的<<,其告知Gradle,代码在执行阶段执行,而不是在配置阶段

Task在Gradle中有很多简写,在Gradle中定义任务的常用方式有以下几种:

task(hello) << {
    println 'Hello , world!'
}

task('hello') << {
    println 'Hello ,world!'
}

tasks.create(name: 'hello') << {
    println 'Hello , world!'
}

任务剖析

Task接口是所有任务的基础,其定义了一系列属性和方法。所有这些都是由一个叫做DefaultTask的类实现的。这是标准的任务实现方式,你创建的每一个新的任务,都是基于DefaultTask的。

每个任务都包含一个Action对象的集合。当一个任务被执行时,所有这些动作会以连续的顺序被执行。你可以使用doFirst()和doLast()方法来为一个任务添加动作。这些方法都是以一个closure作为参数,然后被包装到一个Action对象中的。
task hello {
    println 'Configuration'

    doLast {
     println 'Goodbye'
    }

    doFirst{
     println 'hello'
    }
}

当执行hello task时输出如下:

$ gradlew hello 
Configuration
:hello
hello
Goodbye

即使打印“Goodbye”的代码在“Hello”的代码之前定义,但当执行task时,他们仍会按正确的顺序执行。你甚至可以多次使用doFirst()和doLast(),如下所示:

task mindTheOrder{
    doFirst{
        println 'Not really first'
    }

    doFirst{
        println 'First!'
    }

    doLast{
        println 'Not really last'
    }

    doLast{
        println 'Last!'
    }
}

执行这个task的输出如下:

$ gradlew mindTheOrder
:mindTheOrder
First!
Not really first.
Not really last.
Last!

注意,doFirst()总是添加一个动作到task的最前面,而doLast()总是添加一个动作到最后面,这意味着,当使用这些方法的时候,顺序很重要。

当涉及给tasks排序时,可以使用mustRunAfter方法.

当使用mustRunAfter()时,你需要指定,如果两个任务都被执行,那么必须有一个任务始终先执行。

task task1 <<{
    println 'task1'
}

task task2 <<{
    println 'task2'
}

task2.mustRunAfter task1

同时运行task1和task2,不管你指定了什么样的顺序,task1总是在task2之前执行。

gradlew task2 task1
:task1
task1
:task2
task2

在这两个任务之间,mustRunAfter()方法不会添加任何依赖,因而我们可以只执行task2而不执行task1。如果你需要一个任务依赖于另一个,那么可使用dependsOn()方法。

dependsOn()的例子

task task1 << {
    println 'task1'
}

task task2 << {
    println 'task2'
}

task2.dependsOn task1


当你试图只执行task2而不执行task1时,结果如下:

$ gradlew task2
:task1
task1
:task2
task2

使用mustRunAfter(),当同时执行task1和task2时,task1总是在task2之前执行,两者也可以独立执行。使用dependsOn(),即使在未明确提及的情况下,task2的执行也总是会触发task1.这是一个重要的区别。
 

最后

以上就是无聊香菇为你收集整理的Groovy之task语法的全部内容,希望文章能够帮你解决Groovy之task语法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部