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

news2024/9/21 5:46:07

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 任务,如下:

1881af7ae520e925f7bd6e4beded854e.png
1685894623286
// 自定义的任务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 的参数,如下:

gradle -i task3

fced038866303dc6868a546cb141b54d.png

1685894792232

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

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

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

任务的行为

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

// 自定义的任务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 较后执行。

66e9371a55b95830d0e873ff6035818a.png

1685895007103

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

// 定义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"
}

执行如下:

2919354c304a8396382f05af8d862d04.png

1685895271872

底层原理分析:无论是定义任务自身的 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 版本之后就废弃,不能使用了,如下所示:

task hello << {
    println 'Hello world!'
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/693429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flutter Exception: Gradle task assembleDebug failed with exit code 1

Exception: Gradle task assembleDebug failed with exit code 1 解决方案&#xff1a; 出现这个问题&#xff0c;可能是依赖的插件无法下载 找到项目的android->build.gradle, 将 google() mavenCentral()改成 maven{url https://maven.aliyun.com/repository/google }m…

XML的运用(XML解析)

一、XML文件的三种配置位置机读取方式 Java中配置XML文件的三种配置位置机读取方式&#xff1a;常用的三种 1、同包下 在演式之前我们把前期演示的部分给准备好&#xff1a; 我们以properties为后缀的文本为例&#xff1a; unamemybatis_ssm upassxiaoli urljdbc:mysql://lo…

短视频矩阵-短视频seo源码开发搭建

开发场景&#xff1a;抖音seo&#xff0c;短视频seo&#xff0c;抖音矩阵&#xff0c;短视频矩阵源码开源 一、 短视频矩阵源码需要掌握以下技术&#xff1a; 1. 视频编码技术 短视频矩阵系统利用视频编码技术&#xff0c;将视频文件进行压缩和解压缩&#xff0c;实现了高质…

cut一些常用的用法

目录 介绍语法示例切割提取指定列数据切割提取指定字符数据切割提取指定字节数据切割提取指定单词数据切割提取bash进程的PID号 小结 介绍 cut 译为“剪切, 切割” , 是一个强大文本处理工具&#xff0c;它可以将文本按列进行划分的文本处理。cut命令逐行读入文本&#xff0c;…

掌握apply和call,解密JavaScript的this指向

文章目录 一、介绍apply和call方法1.1 简述apply和call方法的作用1.2 apply和call方法的共同点与不同点 二、深入理解apply方法2.1 apply方法的语法和参数介绍2.2 apply方法的使用示例2.3 apply方法的应用场景 三、深入理解call方法3.1 call方法的语法和参数介绍3.2 call方法的…

MySQL:库的操作和表的操作(内含MySQL数据类型讲解)

进入数据库的数据目录 cd var/lib/mysql 库的操作 创建数据库 创建数据库的本质是创建目录。 创建数据库时有两个编码集&#xff1a;1.数据库编码集&#xff08;存储时使用&#xff09;2.进行字段比对读取时使用的编码方式&#xff09; 语法&#xff1a; CREATE DATABASE …

SpringBoot+Prometheus采集Metrics指标数据

简介 本文介绍在springboot3.x里配置启用系统指标监控功能&#xff0c;来监视系统各项Metrics指标&#xff0c;从而实时了解应用的运行健康状态&#xff0c;通过promtheus服务提供数据收集与指标可视化方案&#xff1b; Metrics指标 metrics指标表示应用程序代码运行中提供的…

【JavaWeb】前端之CSS基础认知

目录 前言 1、CSS基本语法规范 2、向HTML中引入CSS的方式 2.1、内部样式 2.2、外部样式 2.3、内联样式 3、CSS选择器 3.1、基础选择器 3.1.1、标签选择器 3.1.2、类选择器 3.1.3、id选择器 3.1.4、通配符选择器 3.2、复合选择器 3.2.1、后代选择器 4、CSS常用元素…

leetcode514. 自由之路(java)

自由之路 leetcode514. 自由之路题目描述解题思路代码演示 动态规划专题 leetcode514. 自由之路 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/freedom-trail 题目描述 电子游戏“辐射4”中&#xff0c;任务 “通向自由…

深入浅出设计模式 - 工厂模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; ​ &#x1f495;&#x1f495; 感兴趣的同学可…

目标检测舰船数据集整合

一、光学数据集 1、 DIOR 数据集(已下载yolo版本)&#xff08;论文中提到过&#xff09; “DIOR”是一个用于光学遥感图像目标检测的大规模基准数据集。数据集包含23463个图像和192472个实例&#xff0c;涵盖20个对象类。这20个对象类是飞机、机场、棒球场、篮球场、桥梁、烟囱…

CSS 边框盒子

文章目录 边框盒子 边框盒子 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 默认的盒子类型是内容盒子&#xff1a;content-box 在内容盒子中&#xff0c;width和height是内容尺寸 盒子整体的尺寸内容的尺寸两个边框两个内边距 css3引入了新的盒子类型&…

Linux——对动静态库的优缺点和底层剖析对比

目录 静态库底层剖析&#xff1a; 所以静态库的优缺点总结&#xff1a; 动态库底层剖析&#xff1a; 所以使用动态库的优缺点剖析&#xff1a; 静态库底层剖析&#xff1a; 如上图&#xff1a;file1.exe被加载到了内存&#xff0c;成为了进程&#xff0c;因为代码中都有pri…

【Docker】docker安装配置Jenkins

docker 安装 Jenkins #拉镜像 docker pull jenkins/jenkins#创建卷(volume) docker volume create jenkins_home#制作容器并启动 docker run -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /usr/lib/jvm/java-8-openjdk-amd64:/usr/local/java…

IMX6ULL系统移植篇-镜像烧写方法

一. 烧录镜像简介 本文我们就来学习&#xff1a;windows 系统下烧录镜像的方法。 如何使用 NXP 官方提供的 MfgTool 工具通过 USB OTG 口来 烧写系统。 二. windows下烧录镜像 1. 烧录镜像前准备工作 &#xff08;1&#xff09;从开发板上拔下 SD卡。 &#xff08;2…

SpringBoot中如何优雅的统一全局返回格式与处理系统异常?

在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;接口层主要负责处理与外部系统的交互&#xff0c;包括接收用户或外部系统的请求&#xff0c;调用应用层服务处理请求&#xff0c;以及将处理结果返回给请求方。 我发现一些代码中&#xff0c;接口的返回值类型众多&am…

chatgpt赋能python:Python语言单词大全:从入门到精通

Python语言单词大全&#xff1a;从入门到精通 Python是一种高级编程语言&#xff0c;适用于各种应用领域&#xff0c;如数据科学、机器学习、网站开发和自动化脚本编写等。Python语言有其内置的语法和功能&#xff0c;我们将在本文中逐一介绍和解释。 1. Python中最基本的单词…

K8S集群安全之安全机制

1. 安全机制说明&#xff1a; Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server是集群内部各个组件通信的中介&#xff0c;也是外部控制的入口。所以Kubernetes的安全机制基本就是围绕保护APIServer来设计的。Kubernetes使…

小程序实现双列布局

目录 1 双列布局2 采用流式布局3 采用网格布局总结 小程序中双列布局是一个常见的效果&#xff0c;比如在电商小程序的商品推荐&#xff0c;效果如下&#xff1a; 1 双列布局 双列布局的话特点是随着数据的增多&#xff0c;我们会出现偶数或者奇数的问题&#xff0c;如果是偶…

【Data Studio 2.1.0连接openGauss2.1.0】

Data Studio 2.1.0连接openGauss2.1.0 一、实验环境说明二、配置客户端接入方式三、Data Studio2.1.0连接openGauss数据库 一、实验环境说明 openGauss2.1.0版本Data Studio 2.1.0 版本 二、配置客户端接入方式 【以下操作是omm用户进行】 修改配置文件pg_hba.conf&#xf…