创建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- ...
随机推荐
- HTTP学习笔记01-URL
URI URL语法 相对URL和绝对URL 相对URL URL的常用协议 http https mailto ftp rtsprtspu file news telnet 展望美好的未来 1.URI ...
- Linux下SPI测试程序
/** 说明:SPI通讯实现* 方式一: 同时发送与接收实现函数: SPI_Transfer()* 方式二:发送与接收分开来实现* SPI_Write() 只发送* SPI_Read() 只接收* 两 ...
- SpringMVC实现AJax以及RestFull风格
RestFull风格就是url路径中不能出现?不能带参数,如https://www.baidu.com/user/item/1234这个格式,也叫url资源定位 1.需要在web.xml中开启put, ...
- shell删除最后一列、删除第一行、比较文件
删除文件第一行: sed -i '1d' filename 删除文件最后一列: awk '{print $NF}' filename 比较文件的方法: 1)comm -3 --nocheck-orde ...
- LeetCode——Construct Binary Tree from Preorder and Inorder Traversal
Question Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may as ...
- jq点击切换按钮最简洁代码
<div id="swphoto"> <img src="1.jpg"> <img src="2.jpg&q ...
- HBase学习3(win下使用Eclipse搭建hbase开发环境)
第一步:创建一个java project命名为wujiadong_hbase 第二步:在该工程下创建一个folder命名为lib(储存依赖的jar包) 第三步:将集群中的hbase安装目录下载一份到w ...
- MapReduce-读取HBase
MapReduce读取HBase数据 代码如下 package com.hbase.mapreduce; import java.io.IOException; import org.apache.h ...
- css3表格样式
<caption> 关于表格存储内容的描述或总结. 1.border-spacing:0;border-spacing 属性设置相邻单元格的边框间的距离(仅用于“边框分离”模式). 2. ...
- Nodejs+MongoDB+Bootstrap+esj搭建的个人简易博客
github:https://github.com/yehuimmd/myNodeBloy Nodejs+MongoDB+jQuery+Bootstrap-esj搭建的个人简易博客 主要功能 前台 : ...