Gradle学习之第二步创建Task

【Android Gradle学习笔记】第三天:Gradle Task Gradle Task是Android构建工具的核心执行单元,负责编译代码、处理资源、打包APK等操作。文章介绍了Gradle任务的基本概念和两种创建方式:通过task关键字快速创建和指定任务类型(如Copy、Exec)实现特定功能。重点讲解了任务依赖关系(dependsOn)、执行顺序控制(mustRunAfter)以及任务前后操作(doFirst/doLast)。最后提到通过group和description对任务进行分组和描述管理,提高构建流程的可控性和可维护性。 阅读详情
请通过以下方式下载本系列文章的Github示例代码:
git clone https://github.com/davenkin/gradle-learning.git
 
 
Gradle的Project从本质上说只是含有多个Task的容器,一个Task与Ant的Target相似,表示一个逻辑上的执行单元。我们可以通过很多种方式定义Task,所有的Task都存放在Project的TaskContainer中。
 
(1)调用Project的task()方法创建Task
在使用Gradle时,创建Task最常见的方式便是:
 
task hello1 << {   
  println 'hello1'
}
 
这里的“<<”表示追加的意思,即向hello中加入执行过程。我们还可以使用doLast来达到同样的效果:
 
task hello2 {   
  doLast {      
     println 'hello2'
  }
}
 
 
另外,如果需要向Task的最前面加入执行过程,我们可以使用doFirst:
 
task hello3 {   
  doLast {      
     println 'hello3'
  }
}
 
在上面的3个例子中,Gradle的DSL向我们展示了一种非常自然的风格来创建Task,而事实上这些都只是一种内部DSL,也即必须符合groovy的语法要求。上面的task关键字实际上是一个方法调用,该方法属于Project。Project中存在多个重载的task()方法。和Ruby等动态语言一样,在调用groovy方法时,我们不用将参数放在括号里面。
以上我们自定义的3个Task都位于TaskContainer中,Project中的tasks属性即表示该TaskContainer。为此,我们可以新建一个Task来显示这些信息:
 
task showTasks {   
  println tasks.class   
  println tasks.size()
}
 
将以上4个Task放在同一个build.gradle中,再执行gradle showTasks,命令行输出如下:
 
...class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated4...
 
上面的DefaultTaskContainer_Decorated表示tasks类型,而4表示该TaskContainer中包含有4个自定义的Task——包括showTasks本身。
 
 
(2)通过TaskContainer的create()方法创建Task


在上文中我们讲到,通过task()方法创建的Task都被存放在了TaskContainer中,而Project又维护了一个TaskContainer类型的属性tasks,那么我们完全可以直接向TaskContainer里面添加Task。查查TaskContainer的API文档可以发现,TaskContainer向我们提供了大量重载的create()方法用于添加Task。
 
tasks.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 hello7 << {   
  description = "this is hello7"    
  println description
}
 
需要注意的是,对hello8的description设置发生在创建该Task之后,在执行“gradle hello8”时,命令行依然可以打印出正确的“this is hello8”,这是因为Gradle在执行Task时分为两个阶段,首先是配置阶段,然后才是实际执行阶段。所以在执行hello8之前,Gradle会扫描整个build.gradle文档,将hello8的description设置为“this is hello8”,然后执行hello8,此时hello8的description已经包含了设置后的值。
我们还可以通过调用Task的configure()方法完成Property的设置:
 
task hello9 << {   
  println description
}
hello9.configure {   
  description = "this is hello9"
}
 
实际上,通过闭包的方式配置Task在内部也是通过调用Task的configure()方法完成的,对此我们将在后续的文章中详细地讲到。
学习笔记( 11 ) - 解决:finalshell连接虚拟机(ubuntu)超时,主机ping不通虚拟机,主机没有VMnet8网卡, Connection refused: connect 解决:finalshell连接虚拟机(ubuntu)超时,主机ping不通虚拟机,主机没有VMnet8网卡, Connection refused: connect 阅读详情

相关推荐

ITK-snap医学图像标注方法(超级详细)——保姆级

医学3D图像标注方法,非常详细,保姆级

jialiyk的博客 3万+

创建Task的多种方法

Gradle学习在本系列的上篇文章中,我们讲到了Gradle入门,在本篇文章中我们将讲到创建Task的多种方法。请通过以下方式下载本系列文章的Github示例代码:git clone https://github.com/davenkin/gradle-learning.gitGradle的Project从本质上说只是含有多个Task的容器,一个Task与Ant的Target...

weixin_33825683的博客 286

2019年电赛D题《简易电路特性测试仪》全过程

2019年全国大学生电子设计大赛D题《简易电路特性测试仪》硬件部分及故障分析

zzhao2580的博客 5万+

Gradle入门篇之自定义Task类

自定义Task类,你可通过继承 Gradle 中的类实现。注意事项:自定义的 Task 类必须是可以继承的,也就是说自定义的 Task 类不能是 final 的。如果你使用 Kotlin 语言开发,要特备注意 kotlin 语法中,类定义默认是 final 的(Java 语法中,如果没有指定是 final,都不是 final),因此我们在定义 Task 类的时候,习惯性将 Task 类定义为 抽象类 (abstract),这样就可以确保 Task 类不是 final 的。

yingaizhu的博客 2136

Python爬虫实战:巧用HEAD请求和Cookie令牌绕过沃尔玛反爬(附完整代码)

本文详细介绍了如何利用Python爬虫技术,通过HEAD请求和Cookie令牌绕过沃尔玛的反爬机制。文章深入解析了人机验证系统的运作原理,并提供了完整的工程化实现代码,包括令牌池设计、高并发架构和异常处理策略,帮助开发者高效采集电商数据。

weixin_29046035的博客 1009

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

weixin_37584728的博客 4580

在python里创建一个任务(Task)实例

更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com/ 与事件循环进行交互,最基本的方式就是任务,任务封装了协程和自动跟踪它的状态。任务是Future类的子类,所以其它协程可以等待任务完成,或当这些任务完成获取返回结果。 在这里通过create_task()函数来创建一个任务实例,然后事件循环就运行这个任务

菜鸟教程 3337

开源免费!ReaLTaiizor如何用MIT许可证打造专业级WinForm UI?

摘要: ReaLTaiizor是一款开源UI控件库,为WinForm应用提供现代化界面解决方案。支持100+组件、多主题切换(浅色/深色/自定义)和.NET 4.8-8.0全版本兼容,MIT许可证允许免费商用。通过NuGet快速安装,3步改造传统界面:1)注入主题(如this.Theme = new Dark()),2)替换原生控件为高颜值组件(如ModernGrid替代DataGridView),3)集成高级功能(分页/动画提示)。典型场景包括登录界面美化(进度动画+通知控件)和数据表格Material风

墨夶的博客 1521

C++ create_task详解

IAsyncOperation<T>^ asyncOperation = create_async( []() { return create_task(FirstAsync(...)) .then( [](X val){ return SecondAsync(val, ...); }).then( ...

weixin_34198762的博客 657

最全教程cadence建立个人CIS数据库

此时如果你删除office365,再装Access数据库,可以安装上,然后你再装office365,系统又会把Access软件给你删除掉,因为冲突了。可以在自己的电脑上新建CIS库,主要包含下面几个内容:数据库文件,原理图封装,PCB封装,数据手册,另外建议做一个器件命名的说明。allegro在调用封装的时候,是看的.psm文件,而不是.dra文件,因此只要是c0402.psm,那么所有的内容都要保持一致。(1)文件夹不要有中文,不要有空格,否则无法识别,可以参考博主的方式,全部使用英文输入法下划线。

D_Katter的博客 252

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

matlab createtask,Matlab批量与createjob

我正在使用以下包装器代码(缩短)将批处理作业(存储在my_parjob.m文件中)提交到matlab集群.files = { .... list of attached files ... };cluster = parcluster(); %returns my cluster objectjob = batch(cluster,'my_parjob','CaptureDiary',true,...

weixin_39730911的博客 781

基于Simulink的转向控制系统仿真建模示例

本文完成了基于 Simulink 的 EPS 转向控制系统仿真,实现了:✅掌握 EPS 助力控制基本原理✅构建车速敏感的可变助力策略✅在 Simulink 中验证低速轻便、高速沉稳的手感✅达成“安全、舒适、高效”的现代转向系统。

xiaoheshang_123的博客 87

Gradle任务创建Task

Gradle任务创建Task 1.Task创建 1.1.查看有多少个task任务 在Terminal 命令界面输入 gradle tasks 查看任务列表。 1.2.task创建 task创建有两种方式,一种是用task重载方法创建。另一种是用task容器创建。 在gradle中一个project中多个task是通过task容器来管理,task容器就是一个task管理类。 在Termi...

Bruce小鬼 2573

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Gradle 进阶学习 之 Task

Task就像是Gradle项目中的小小机器人,每个机器人都有特定的工作要做,而且它们还可以根据项目的需要调整自己的工作方式。通过组合不同的Task,你可以构建起复杂的构建流程。

一切总会归于平淡 1940

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Gradle 核心之 Task

只有 Task 才可以在Gradle的执行阶段去执行(其实质是执行的 Task 中的一系列 Action),所以 Task 的重要性不言而喻。Task 的定义方式有如下两种:Task 的配置方式也有如下两种:配置了 group 后可以在 Android Studio 的 Gradle 面板看到对应的 Task Group 及其分组下的 Tasks,如下图所示:一般来说都推荐为我们的 task 配置 group,便于我们查找 task。

Dream It Possible 1973

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Gradle学习系列之二——创建Task的多种方法

Gradle的Project和build.gradle存在着一对一的关系。 一个Project从本质上说只是含有多个Task的容器。 Any property or method which your script uses is delegated through to the associated Project object. The tasks of the project. A method is added for each task, using the name of the task

Ryze 767

Gradle 简单 Task 的创建和使用

Gradle 简单 Task 的创建和使用 如果我的文章对您产生了帮助,我将非常开心,欢迎关注我的Github,欢迎访问我的博客,欢迎star。 Task表示Gradle构建的单个原子操作,例如:编译class、打包成jar。 Hello World 将以下Task添加到 build.gradle 文件末尾。 task hello { print 'Hello Gradle Task!...

学无止境,终身学习 1838

Gradle之定义Task

1 Task Task可以理解为Gradle的执行单元,实在是太重要了。根据前面的分析,Gradle通过一个个task来完成具体的构建任务,下面我们来看下Task的定义。最简单直接,通过如下方式来定义: task myTask { println "config myTask" } // 执行下 D:\0.GitHub\seniorlibs> gradlew myTask con...

chenliguan的博客 362

【Gradle-7】Gradle构建核心之Task指南

至此关于Gradle Task的部分就介绍完了。从Task是什么、写在哪、怎么写、怎么运行、怎么写好等方面为切入点,由浅入深、依次递进的介绍了Task Action执行顺序、自定义Task、Task依赖、Task增量构建等相关知识,总的来说,涉及的知识点还是不少的,更需要在实践中去理解并应用。希望本文对你有所帮助~

chuyouyinghe的专栏 888

gradle Task 详解

Task定义和配置、 Task的执行阶段、 Task 的依赖、 Task 指定执行顺序、 Task 主gradle引入其他的gradle文件、 将某一个task挂载到指定的task之后执行

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2360

Android Gradle学习(二) 如何创建Task

一个 Task 是 Gradle 里项目构建的原子执行单元,Gradle 通过将一个个Task串联起来完成具体的构建任务,每个 Task 都属于一个 Project。关于 Task 的具体定义可查看官方文档Gradle Task API。 1. 在Gradle里定义Task 在 build.gradle 里可以通过 task 关键字来创建Task: task myTask task myTask ...

假装你是大灰狼的专栏 2098

Gradle - 自定义任务(Task) 从创建到执行的完整指南

Gradle自定义任务指南 本文全面介绍Gradle中自定义任务的创建与使用: 任务概念:Gradle任务是构建过程的最小单位,代表编译、测试等操作。任务分为配置阶段和执行阶段,可建立依赖关系确保执行顺序。 创建方式: 使用task关键字定义简单任务 通过tasks.create()动态创建任务 继承内置任务类型实现复杂功能 Kotlin DSL中的任务定义语法 任务配置: doFirst和doLast定义执行逻辑 设置任务属性、描述和分组 管理任务依赖关系 条件执行控制 高级应用: 增量构建提高效率 自定

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Gradle 使用指南 -- Gradle Task

概述Gradle 官方文档 Gradle User Guide 中文版Gradle 中的每一个 Project 都是由一个或者多个 Task 来构成的,它是 gradle 构建脚本的最小运行单元,一个 Task 代表一些更加细化的构建,可能是编译一些 classes、创建一个 Jar、生成 javadoc、或者生成某个目录的压缩文件。Task 相关命令 ./gradlew tasks:列出当前工程

寒江蓑笠的专栏 2283
上一篇: Gradle学习之第一步入门操作
下一篇: Gradle学习之创建Task的方法
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值