Gradle之恋-任务2
由于任务作为Gradle的核心功能模块,多花点精力是值得的,本文继上一篇主要涉及到:任务的执行顺序、为任务添加组和描述、跳过任务、扩展任务属性、定义默认任务。

任务顺序
如果构建(build)不能在清理(clean)之前执行,因为这样无意义;构建之前必须先验证;做集成测试前先做单元测试等就必须指定其任务的执行顺序。
任务依赖的顺序
指定顺序不同于任务间的依赖顺序:依赖是影响那些任务执行,而顺序是影响这些要执行的任务之间的顺序。
task hello{
doLast{
print 'hello'
}
}
task aline{
doLast{
print ' - '
}
}
task world(dependsOn:[hello,aline]){
doLast{
println 'world!'
}
}
当执行world任务时,执行的顺序是aline,hello,world,输出
- helloworld!
可见当任务有多个依赖时,会先执行被依赖的任务,而被依赖的任务执行顺序是依据任务名的字典顺序。你可以自定义顺序如
aline.mustRunAfter hello
则aline任务必须在hello之后执行,输出
hello - world!
指定顺序
指定顺序是通过两个关键词来设定的:mustRunAfter和shouldRunAfter,前者是严格指定的,而后者比较宽松,在两种情况下不按照指定的顺序执行:
- 如果使用它产生循环顺序时,如指定了taskA在taskB之后,而又指定了taskB在taskA之后。
这种情况官方文档貌似没说清楚?!!!后续再研究下源码看看。
bash task taskX { doLast { println 'taskX' } } task taskY { doLast { println 'taskY' } } task taskZ { doLast { println 'taskZ' } } taskX.dependsOn taskY taskY.dependsOn taskZ taskZ.shouldRunAfter taskX
执行$ gradle -q taskX
taskZ
taskY
taskX
添加描述与组
可以通过关键词description和grou为任务添加描述和组,然后可以使用gradle tasks来查看,如果改任务没有组,则需要额外参数--all来查看。
task description{
group 'mine'
description 'this is just a description.'
}
查看
Mine tasks
----------
description - this is just a description.
替换任务
有时根据需要,你可能想替换一个任务,这个很简单:更加任务名进行重写:
task overwriteTask{
doLast{
println 'this is a str task';
}
}
task overwriteTask(overwrite:true){
doLast{
println 'this is a new overwrite str task.'
}
}
执行
$ gradle -q oT
this is a new overwrite str task.
跳过任务
Gradle提供多种跳过任务的方法,不仅有命令行形式的,还有代码级别的。
命令行
当你想跳过依赖的任务时,可以使用-x形式跳过,如执行build跳过单元测试时:
$ gradle build -x test
断言
你可以使用onlyIf()来做单元,当其返回值为true时被执行,否则跳过.
task hello{
doLast{
println 'hello world!'
}
}
hello.onlyIf{!project.hasProperty('skipHello')}
当执行gradle hello -PskipHello 时,任务hello并不会执行。命令行参数-P为命令行设置property。
StopExecutionException
当任务抛出StopExecutionException将跳过任务继续执行下一个任务。
task hello{
doLast{
print 'hello '
}
}
hello.doFirst{
throw new StopExecutionException()
}
task world(dependsOn:hello){
doLast{
println 'world!'
}
}
执行任务world即可看到效果。
enabled属性
每个任务都有一个enabled属性,设置为false将跳过。
task hello{
doLast{
print 'hello '
}
}
hello.enabled = false
task world(dependsOn:hello){
doLast{
println 'world!'
}
}
扩展属性
你可以通过ext来扩展任务的属性
task hello{
ext.str="hello world!"
}
task say(){
doLast{
println hello.str
}
}
默认任务
Gradle允许你使用关键词defaultTasks定义一个或多个任务作为默认任务,当没有任务指定时则执行默认任务。
defaultTasks 'hello','intro'
task hello{
doLast{
println 'hello,welcome to you!'
}
}
task intro(){
doLast{
println 'my name is zhai'
}
}
可以执行gradle -q来验证。
未完待续....
更多原创文章可关注我的个人博客:宅前疯 或微信公众账号

Gradle之恋-任务2的更多相关文章
- Gradle之恋-任务1
任务作为Gradle的核心功能模块,而且Gradle的任务还可以具有自己的属性和方法,大大扩展了Ant任务的功能.由于任务相关内容比较多,分为两篇来探讨,本篇主要涉及到:任务的定义.任务的属性.任务的 ...
- Gradle之恋-命令行详解
虽然很多童鞋都必须要用IDE,但有些命令是IDE很难表现出来的,还是命令行返璞归真.本文就带你来剖析Gradle的命令行. 本文不包括试验性(incubating)的选项,如--configure-o ...
- Gradle配置APK自动签名完整流程
转载请注明出处:http://www.cnblogs.com/LT5505/p/6256683.html 一.生成签名 1.命令行生成签名,输入命令keytool -genkey -v -keysto ...
- gradle学习笔记(1)
1. 安装 (1) 下载最新gradle压缩包,解压到某处.地址是:Gradle web site: (2) 添加环境变量: 1) 变量名:GRADLE_HOM ...
- Gradle 实现 Android 多渠道定制化打包
Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...
- 解决 Could not find com.android.tools.build:gradle 问题
今天拉同事最新的代码,编译时老是报如下错误: Error:Could not find com.android.tools.build:gradle:2.2.0.Searched in the fol ...
- React Native Android gradle下载慢问题解决
很多人会遇到 初次运行 react-native run android的时候 gradle下载极慢,甚至会失败的问题 如下图 实际上这个问题好解决的 首先 把对应版本的gradle下载到本地任意一个 ...
- Android studio使用gradle动态构建APP(不同的包,不同的icon、label)
最近有个需求,需要做两个功能相似的APP,大部分代码是一样的,只是界面不一样,以前要维护两套代码,比较麻烦,最近在网上找资料,发现可以用gradle使用同一套代码构建两个APP.下面介绍使用方法: 首 ...
- 对Maven、gradle、svn、spring 3.0 fragment、git的想法
1.Maven Maven可以构建项目,采用pom方式配置主项目和其他需要引用的项目.同时可结合spring3.0的新特性web fragment. 从现实出发,特别是对于管理不到位,程序员整体素质 ...
随机推荐
- 通过RMAN克隆11g数据库(基于active database)
11g的RMAN duplicate 可以通过Active databaseduplicate和Backup-based duplicate两种方法实现.这里的测试使用的是Active databas ...
- doubango(6)--Doubango协议栈中对RTP的管理
相关数据结构 1. tsip_dialog_invite_t 描述: 一个invite_dialog代表了一个invite期间的所有的信令流程,因此,它首先是一个普遍的dialog的特殊化结构, ...
- 在LINUX上创建GIT服务器
转载 如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. 生成 SSH 公钥 每个需要使用git服务器的工程师,自己需要生成一个ssh公钥进入自己的~/.ssh目录,看有 ...
- 数据结构实习-迷宫(基于Qt实现)
预览效果: Maze.pro文件 #------------------------------------------------- # # Project created by QtCreator ...
- Redis 介绍与安装
Redis 是Key-Value 类型的内存数据库,支持多数据结构,性能非常出色,每秒处理十万次读写操作. 整个大致的过程是: 整个数据库加载到内存中,操作之,通过异步定期处理数据库数据的刷新到硬盘 ...
- 设备文件三大结构:inode,file,file_operations
驱动程序就是向下控制硬件,向上提供接口,这里的向上提供的接口最终对应到应用层有三种方式:设备文件,/proc,/sys,其中最常用的就是使用设备文件,而Linux设备中用的最多的就是字符设备,本文就以 ...
- MVC无刷新查询,PagedList分页控件使用,导出Excel
使用MVC开发也有一段时间了,总结下无刷新部分视图的使用.PagedList分页控件的使用. @using PagedList @model StaticPagedList<T> < ...
- 《JAVASCRIPT高级程序设计》客户端检测
web开发的理想状态之一是浏览器支持一组最常用的功能,但是在现实情况下,浏览器间的差异非常大,因此,为了兼容大部分的了浏览器,开发人员首先需要设计最通用的方案,然后再使用客户端检测的技术增强该方案.客 ...
- 深度理解微信小程序的思想
这篇文章不涉及小程序技术方面得问题,只讨论小程序的核心问题. 探讨一个问题最好的方法是问"为什么",这篇文章主要思路是通过回答以下几个问题来探讨微信小程序的"思想&quo ...
- C#下控制台程序窗口下启用快速编辑模式运行线程会阻止线程运行
最近做一个小的功能,使用C#控制台程序开启一个线程进行无限循环没5秒处理一次程序,发现控制台窗口在开启快速编辑模式情况下,进行选择程序打印 出来的文字后发现线程不走了,将快速编辑模式去除后,线程就不会 ...