Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >8--Gradle进阶 - Gradle任务的入门、任务行为

8--Gradle进阶 - Gradle任务的入门、任务行为

作者头像
Devops海洋的渔夫
发布于 2023-09-01 00:55:03
发布于 2023-09-01 00:55:03
25300
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

8--Gradle进阶 - Gradle任务的入门、任务行为

Gradle Task

Gradle 项目工程的管理 实质上是 Task 对象的集合。一个 Task 表示一个逻辑上较为独立的执行过程,比如编译Java 源代码,拷贝文件, 打包Jar 文件,甚至可以是执行一个系统命令。另外,一个 Task 可以读取和设置Project 的Property 以完成特定的操作。

下面我们来看看如何编写 Gradle Task 任务。

任务入门

可参考官方文档:https://docs.gradle.org/current/userguide/tutorial_using_tasks.html

我们在 build.gradle 文件编写 task 任务,如下:

1685894623286

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 自定义的任务1
task("task1") {
    println "hello task1...."
}

// 自定义的任务2
task "task2" {
    println "hello task2...."
}

// 自定义的任务3
task task3 {
    // 任务的配置阶段执行
    println "hello task3...."
    // 任务的行为:在执行阶段执行,doFirst会在doLast执行之前执行
    doFirst() {
        println "task3 doFirst...."
    }
    doLast() {
        println "task3 doLast...."
    }
}

我们可以在终端输入 gradle 任务名称 来执行参数,同时可以增加参数 -i 打印 info 的参数,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gradle -i task3

1685894792232

提示 1 :task3 的配置段是在配置阶段完成

提示 2 :task3 的doFirst、doLast 方法是执行阶段完成,并且doFirst 在doLast 执行之前执行。

**提示 3:**区分任务的配置段和任务的行为,任务的配置段在配置阶段执行,任务的行为在执行阶段执行

任务的行为

doFirst、doLast 两个方法可以在任务内部定义,也可以在任务外部定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 自定义的任务3
task task3 {
    // 任务的配置阶段执行
    println "hello task3...."
    // 任务的行为:在执行阶段执行,doFirst会在doLast执行之前执行
    doFirst() {
        println "task3 doFirst...."
    }
    doLast() {
        println "task3 doLast...."
    }
}

// 在task3外部定义doFirst doLast
task3.doFirst() {
    println "task3 doFirst.... outter"
}

task3.doLast() {
    println "task3 doLast.... outter"
}

执行 gradle task3 如下:

“可以看到外部定义的 doFirst 会比内部定义的 doFirst 较快执行,而外部定义的 doLast 会比内部定义的 doLast 较后执行。 ”

1685895007103

另外,task任务可以定义多个参数,我们再传入一个参数如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 定义map
def map = new HashMap<String, Object>();
//action属性可以设置为闭包,设置task自身的行为
map.put("action", { println "taskD.." })

// 自定义的任务3
task(map, "task3") {
    // 任务的配置阶段执行
    println "hello task3...."
    // 任务的行为:在执行阶段执行,doFirst会在doLast执行之前执行
    doFirst() {
        println "task3 doFirst...."
    }
    doLast() {
        println "task3 doLast...."
    }
}

// 在task3外部定义doFirst doLast
task3.doFirst() {
    println "task3 doFirst.... outter"
}

task3.doLast() {
    println "task3 doLast.... outter"
}

执行如下:

底层原理分析:无论是定义任务自身的 action,还是添加的doLast、doFirst 方法,其实底层都被放入到一个Action 的List 中了,最初这个 action List 是空的,当我们设置了 action【任务自身的行为】,它先将action 添加到列表中,此时列表中只有一个action,后续执行doFirst 的时候doFirst 在action 前面添加,执行 doLast 的时候doLast 在action 后面添加。doFirst 永远添加在actions List 的第一位,保证添加的Action 在现有的 action List 元素的最前面;doLast 永远都是在action List 末尾添加,保证其添加的Action 在现有的action List 元素的最后面。一个往前面添加,一个往后面添加,最后这个action List 就按顺序形成了doFirst、doSelf、doLast 三部分的 Actions,就达到 doFirst、doSelf、doLast 三部分的 Actions 顺序执行的目的。

提示 1:其中<<代表doLast,在gradle5.x 版本之后就废弃,不能使用了,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
task hello << {
    println 'Hello world!'
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Gradle实践指南:task的依赖与执行条件
在使用maven的时候,compile/test/install的先后顺序和依赖关系都十分清晰,而在前面的例子中,可以通过gradle compile和gradle test来进行不同的任务执行,但是实际这些任务之间是有依赖关系的,就像我们在maven里面执行mvn install之前会做什么那样,这篇文章会继续来介绍task之间的依赖与执行条件。
我就是马云飞
2018/12/29
1.8K0
为什么说 Gradle 是 Android 进阶绕不去的坎
Gradle 作为官方主推的构建系统,目前已经深度应用于 Android 的多个技术体系中,例如组件化开发、产物构建、单元测试等。可见,要成为 Android 高级工程师 Gradle 是必须掌握的知识点。在这篇文章里,我将带你由浅入深建立 Gradle 的基本概念,涉及 Gradle 生命周期、Project、Task 等知识点,这些内容也是 Gradle 在面试八股文中容易遇见的问题。
用户9995743
2022/09/26
2.6K0
为什么说 Gradle 是 Android 进阶绕不去的坎
Gradle入门基础一
最近项目中使用到了Gradle所以就抓紧学习了一下。以下资料来自互联网,属于个人整理。图片如有侵权会删除
@派大星
2023/06/28
2800
Gradle入门基础一
Gradle 中的Task
项目实质上是 Task 对象的集合。一个 Task 表示一个逻辑上较为独立的执行过程,比如编译 Java 源代码,拷贝文件, 打包 Jar 文件,甚至可以是执行一个系统命令。另外,一个 Task 可以读取和设置 Project 的 Property 以完成特定的操作。
鱼找水需要时间
2023/02/16
1.3K0
Gradle 中的Task
Gradle入门前奏
在文章为什么现在要用Gradle?中,我们学习了常见的构建工具,以及Gradle与这些构建工具相比有那些不同的特性。这一篇文章我们接着来学习Gradle入门需要掌握的知识,包括配置环境、实现Hello World、Gradle的任务、Gradle日志和Gradle命令行,掌握这些能够更好的理解Gradle。
用户1269200
2018/10/25
7270
Gradle入门前奏
Elcipse安装gradle插件
参考: http://www.gradle.org/docs/current/userguide/installation.html (1)下载Gradle 官网下载www.gradle.org/get-started (2)将GRADLE_HOME/bin/加入$PATH。 将解压,得到gradle-1.8,然后拷贝到/usr:                    输入sudo  cp -r gradle-1.8 /usr 添加环境变量方法:输入sudo gedit /etc.
xiangzhihong
2018/01/30
8510
【Android Gradle 插件】自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )
org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html
韩曙亮
2023/03/30
5210
【Android Gradle 插件】自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )
第四章 Gradle任务
上一章我们已经介绍了Gradle脚本的基础,在其中我们也强调了Gradle中最要的Projects和Tasks这两个概念,尤其是Tasks,我们的所有Gradle的构建工作都是由Tasks组合完成的,那么这一章我们就详细的介绍下Tasks--任务。 任务的介绍也是从实用性出发,比如如何多种方式创建任务,如果访问任务的方法和属性等信息,如果对任务进行分组、排序,以及任务的一些规则性知识。
acc8226
2022/05/17
4420
第四章 Gradle任务
Gradle For Android(7)--创建Task以及Plugin
到目前为止,我们已经看到了很多Gradle构建的属性,并且知道了怎么去执行Tasks。这一章,会更多的了解这些属性,并且创建我们自己的Task。一旦知道如何自定义Task之后,就可以完成更多的事情,并且自定义自己的插件,而在多工程中使用这些Task和Plugin。
None_Ling
2018/10/24
2K0
Gradle For Android(7)--创建Task以及Plugin
Gradle-日志
要显示指定级别的日志,可以通过日志开关来控制的,在执行的时候加入下面这些开关即可.
佛系编码
2019/12/11
1K0
Gradle-日志
Gradle实践指南:生命周期管理
Maven中的生命周期的管理使用了COC,以此为中心的pom.xml文件成为了重中之重,优点是不同项目之间的经验共享变得更加容易,大家大部分都是可以使用类似的套路,缺点则是灵活性稍微降低以及对于pom.xml细节的学习需要较多时间。Gradle则将这些再次放开,给更多的权限与开发者,这篇文章来简单看一下Gradle生命周期管理的一些基础知识。
我就是马云飞
2018/12/29
5990
Gradle 进阶学习 之 Task
Gradle 项目的生命周期分为三大阶段: Initialization -> Configuration -> Execution. 每个阶段都有自己的职责。
叫我阿杰好了
2024/04/25
3480
Gradle 进阶学习 之 Task
Gardle 是什么
Gradle 只运行那些输入和输出有改变的任务,从而避免无效的工作。另外,还可以通过缓存开关重用之前的任务输出(其他的机器上的缓存也是可以的)。 Gradle还实现了许多其他优化,开发团队会持续不断地改进Gradle的性能。
佛系编码
2019/12/11
6450
Gardle 是什么
Android—Gradle教程(一)「建议收藏」
在前几篇中,讲解了Groovy的基础语法,学习新语法过程总是枯燥的,但为了更好的掌握Gradle,那就必须经过该过程。当然从这一篇将会从零基础开始,开展对Gradle的讲解。
全栈程序员站长
2022/09/14
1.7K0
Android—Gradle教程(一)「建议收藏」
12--Gradle进阶 - Gradle任务的类型
前面我们定义的task 都是DefaultTask 类型的,如果要完成某些具体的操作完全需要我们自己去编写gradle 脚本,势必有些麻烦,那有没有一些现成的任务类型可以使用呢?有的,Gradle 官网给出了一些现成的任务类型帮助我们快速完成想要的任务,我们只需要在创建任务的时候,指定当前任务的类型即可,然后即可使用这种类型中的属性和API 方法了。
Devops海洋的渔夫
2023/09/01
3010
12--Gradle进阶 - Gradle任务的类型
Gradle Authoring Tasks
在入门教程中,您学习了如何创建简单的任务。 稍后您还学习了如何向这些任务添加额外的行为,并学习了如何在任务之间创建依赖关系。 这一切都是关于简单的任务,但 Gradle 把任务的概念更进一步。 Gradle 支持增强型任务,这些任务具有自己的属性和方法。 这与您习惯使用 Ant 目标的情况大不相同。 这些强化的任务要么是你提供的,要么是内置在 Gradle 的。
acc8226
2022/05/17
8460
Java一分钟之-Gradle插件开发:自定义构建逻辑
Gradle凭借其灵活的构建脚本和丰富的插件生态,已成为Java项目管理的首选工具。本文将带你深入浅出地了解Gradle插件开发,探讨自定义构建逻辑时的常见问题、易错点以及如何避免这些陷阱,同时附上实用的代码示例。
Jimaks
2024/06/06
2460
掌控 Android Gradle
写在前面 目前国内对Android领域的探索已经越来越深,不少技术领域如插件化、热修复、构建系统等都对Gradle有迫切的需求,不懂Gradle将无法完成上述事情。所以Gradle必须要学习。 Gradle 里的几乎任何东西都是基于这两个基础概念: task project 掌握了这两个,你就掌握了一大半的 Gradle 知识了。 首先讲 Task 字面理解为任务,Gradle 中所有执行的事件都是借由 Task 执行的。 例如我们新建一个 Android 工程,在其根目录中输入: gradle tasks
用户1907613
2018/07/20
6370
第三章 Gradle构建脚本基础
从这章开始,会对Gradle有一个大概的介绍,帮助大家快速的入门Gradle。本章从整体构建脚本的角度介绍Gradle,什么是Settings文件,他有什么作用;什么是Build文件,它又有什么作用,我们可以新建多少Build文件。
acc8226
2022/05/17
5050
第三章 Gradle构建脚本基础
11--Gradle进阶 - Gradle任务的定义方式、指定任务的属性
在前面的篇章中,我们写了不少 task 任务,但是任务完整的定义方式,指定哪些任务属性 没有一个归纳的总结。
Devops海洋的渔夫
2023/09/01
2310
11--Gradle进阶 - Gradle任务的定义方式、指定任务的属性
相关推荐
Gradle实践指南:task的依赖与执行条件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验