创建Task的多种方法
Gradle的Project从本质上说只是含有多个Task的容器,一个Task与Ant的Target相似,表示一个逻辑上的执行单元。
我们可以通过多种方式定义Task,所有的Task都存放在Project的TaskContainer中。
(1)调用Project的task()方法创建Task
在使用Gradle时,创建Task最常见的方式便是:
task hello1 << {
println 'hello1'
}
这里的“<<”表示追加的意思,即向hello1中计入执行过程。我们还可以使用doLast来达到同样的效果:
task hello2 {
doLast {
println 'hello2'
}
}
另外,如果需要向Task的最前面加入执行过程,我们可以使用doFirst
task hello3 {
doFirst {
println 'hello3'
}
}
上面的 Gradle 的 DSL 实际上是一种内部的 DSL 。task关键字实际上是一个方法调用,该方法属于Project。Project存在多个重载的 task()方法。在调用 groovy 方法时,我们可以不用将参数放在括号内。
上面三个自定义的Task都位于TaskContainer中,Project中的tasks属性表示该TaskContainer。
我们可以新建一个Task来显示这些信息:
task showTasks { println tasks.class println tasks.size() }
在第一章中的 build.gradle 中加入 showTasks,再执行 gradle showTasks ,命令行输出如下:
上面的 DefaultTaskContainer_Decorated 表示 tasks 类型。而5表示自定义的 task,包括 showTasks 本身。
(2)通过 TaskContainer 的 create() 方法创建 Task。
TaskContainer 提供了大量重载的 create() 方法用于添加 Task。
task.create(name: 'hello4') << {
println 'hello4'
}
(3)声明Task之间的依赖关系
Task之间是可以存在依赖关系,比如TaskA依赖TaskB,那么在执行TaskA时,Gradle会先执行TaskB,在执行TaskA,我们可以在定义一个Task的同时声明它的依赖关系:
task hello5(dependsOn: hello4)<< {
println 'hello5'
}
当然,我们也可以在定义Task之后再声明依赖:
task hello6 << {
println 'hello6'
} hello6.dependsOn hello5
(4)配置Task
一个Task除了执行操作之外,还包含了多个Property。其中Gradle为每个Task默认定义的Property。比如description,logger等。
另外每一个特定的Task还可以含有特定的Property,比如Copy的from和to等。
也可以动态地向Task中加入额外的Property。在执行一个Task前,我们通常都需要先设定Property的值,Gradle提供了多种方法设置Task的Property的值。
首先,我们可以在定义Task的时候对Property进行配置:
task hello7 << {
description = "this is hello7"
println description
}
我们还可以通过闭包的方式来配置一个已有的Task:
task hello8 << {
println description
} hello8 {
description = "this is hello8"
}
实际上对于hello8的description发生在创建该Task后,执行gradle hello8时,依然能够正确的打印出 this is hello8 。这是因为 gradle 在执行 Task 时分为两个阶段:配置阶段、执行阶段。执行 hello8 前,会先扫描整个build.gradle文档,然后设置属性,再执行 hello8。
还可以通过configure()完成Property的设置:
task hello9 << {
println description
} hello9.configure {
description = "this is hello9"
}
实际上,通过闭包的方法配置Task在内部也是通过调用Task的configuration方法完成的,对此将在后面讲。
创建Task的多种方法的更多相关文章
- Gradle学习系列之二——创建Task的多种方法
在本系列的上篇文章中,我们讲到了Gradle入门,在本篇文章中我们将讲到创建Task的多种方法. 请通过以下方式下载本系列文章的Github示例代码: git clone https://github ...
- ReadyAPI创建功能测试的多种方法
原文:ReadyAPI创建功能测试的多种方法 声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 在ReadyAPI中有多种方法可以创建功能 ...
- cocos2dx创建sprite的多种方法
方法一 最常用,也是最简单的一种方法 CCSprite *bg=CCSprite::create(,,,)); bg->setAnchorPoint(ccp(,)); bg->setPos ...
- Pytorch创建模型的多种方法
目录 Method 1 Method 2 Method 3 Method 4 Reference 网络结构: conv --> relu --> pool --> FC -- > ...
- python中创建字典的多种方法
dict={} dict['key']='value dict={'key':"value","key2":"value2"} dict=d ...
- Gradle学习之创建Task的方法
请通过下面方式下载本系列文章的Github演示样例代码: git clone https://github.com/davenkin/gradle-learning.git Gradle的Pr ...
- 转载“启动\关闭Oracle数据库的多种方法”--来自百度#Oracle
启动\关闭Oracle数据库的多种方法 启动和关闭oracle有很多种方法. 这里只给出3种方法: l Sql*plus l OEM控制台 l Wind ...
- Javascript 中创建自定义对象的方法(设计模式)
Javascript 中创建对象,可以有很多种方法. Object构造函数/对象字面量: 抛开设计模式不谈,使用最基本的方法,就是先调用Object构造函数创建一个对象,然后给对象添加属性. var ...
- 设置SQLServer数据库中某些表为只读的多种方法
原文:设置SQLServer数据库中某些表为只读的多种方法 翻译自:http://www.mssqltips.com/sqlservertip/2711/different-ways-to-make- ...
随机推荐
- 常用display属性
table 1. 宽高由内容撑开 2.独占一行 3.可设置宽高 4.可设置margin.padding inline-table 与display: table大体一致,区别在于不独占一行,为行内元素 ...
- .NET应用程序默认使用管理员身份打开
1.在源码的Properties目录中找到 app.manifest(如果没有进入第二步,有跳过第二步) 2.如果没有app.manifest文件可以打开项目属性,找到安全性项,勾上启用 ClickO ...
- Eclipse与Tomcat的集成(无插件)
1.下载Eclipse(https://www.eclipse.org/downloads/)和Tomcat(http://tomcat.apache.org/),具体的安装略: 2.打开Eclips ...
- 【转】数据库获得当前时间getdate()
CONVERT(nvarchar(10),count_time,121): CONVERT为日期转换函数,一般就是在时间类型 (datetime,smalldatetime)与字符串类型(nchar, ...
- cos用在什么场景
随着应用的不断发展,应用过的图片,文件会不断增加, 存储量的提升带来的是IO用量的提升和带宽占用增加 大部分文件属于低频文件,但是占用较大 硬盘的变更需要重启机器 这个循环会造成支出不断增加 为了节省 ...
- 使用 Spring Boot 快速构建 Spring 框架应用
Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.S ...
- mvn 用指定setting.xml 执行指定pom.xml
mvn package -f pom.xml -s setting.xml clean install
- js字符串和数组的相互转化
一.数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var a, b; a = new Array(0,1,2,3,4); b = a.join("-"); 二 ...
- MySQL 体系结构和存储引擎
数据库: 物理操作系统文件或其他形式文件类型的集合 实例: MySQL数据库向后台线程以及一个共享内存区组成,共享内存可以被运行的后台线程所共享 MySQL 数据库实例在某统上的表现就是一个进程. M ...
- 1、C#中Hashtable、Dictionary详解以及写入和读取对比
在本文中将从基础角度讲解HashTable.Dictionary的构造和通过程序进行插入读取对比. 一:HashTable 1.HashTable是一种散列表,他内部维护很多对Key-Value键值对 ...