首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >9--Gradle进阶 - Gradle任务的依赖方式

9--Gradle进阶 - Gradle任务的依赖方式

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

9--Gradle进阶 - Gradle任务的依赖方式

前言

Gradle Task 任务之间是可以配置依赖的,那么为什么要配置依赖?

因为任务有可能依赖其他任务执行完毕之后,才可以开始执行。对于这种情况,我们就可以通过任务的依赖来控制。

下面来介绍一下任务的依赖方式。

任务的依赖方式

Task 之间的依赖关系可以在以下几部分设置:

  1. 参数依赖
  2. 内部依赖
  3. 外部依赖
方式一:参数方式依赖

下面我们定义 task A、task B,其中 task C 依赖 A B 两个任务执行完毕后,才执行,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 任务的依赖方式
// 方式一:参数方式依赖
task A {
    doLast {
        println "TaskA.."
    }
}
task 'B' {
    doLast {
        println "TaskB.."
    }
}
//参数方式依赖: dependsOn后面用冒号
task 'C'(dependsOn: ['A', 'B']) {
    doLast {
        println "TaskC.."
    }
}

执行如下:

1685978271258

方式二: 内部依赖

在上面我们将 任务的依赖写在参数上,其实还可以写在 任务内部,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//参数方式依赖: dependsOn后面用冒号
task 'C' {
    //内部依赖:dependsOn后面用 = 号
    dependsOn = ['A', 'B']
    doLast {
        println "TaskC.."
    }
}

执行如下:

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

1685978663428

方式三:外部依赖

// 外部依赖:可变参数,引号可加可不加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C.dependsOn(B,'A')

完整 task C 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//参数方式依赖: dependsOn后面用冒号
task 'C' {
    doLast {
        println "TaskC.."
    }
}

// 外部依赖:可变参数,引号可加可不加
C.dependsOn(B, 'A')

执行如下:

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

1685978975517

跨模块项目设置依赖

“当然:task 也支持跨项目依赖 ”

在subproject01 工程的 build.gradle 文件中定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 在subproject01定义task
task subTaskA {
    doLast(){
        println("subTaskA")
    }
}

1685979230684

在subproject02 工程的 build.gradle 文件中定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 在subproject02定义task
task subTaskB {
    //依赖根工程下的subject01中的任务subTaskA :跨项目依赖。
    dependsOn(":subproject01:subTaskA")
    doLast(){
        println("subTaskB")
    }
}

可以从结果来看,跨模块项目的 gradle task 是可以相互依赖的。

扩展说明

拓展 1:当一个 Task 依赖多个Task 的时候,被依赖的Task 之间如果没有依赖关系,那么它们的执行顺序是随机的,并无影响。

拓展 2:重复依赖的任务只会执行一次,比如:

A->B、C

B->C

任务A 依赖任务 B 和任务 C、任务 B 依赖C 任务。执行任务A 的时候,显然任务C 被重复依赖了,C 只会执行一次。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
Collection<Number>与Collection<? extends Number>与Collection<?>
这个问题其实有点反人类,估计大部分人(包括我)对这种转换的第一反应肯定是“当然是对的。。”,说下我的理解:
tiaotiaoba
2022/01/18
4950
聊聊JDK泛型那些事儿
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 
孟君
2019/08/28
3980
聊聊JDK泛型那些事儿
深入理解 Java 泛型
文章主要介绍了Java中的泛型概念,包括泛型的定义、约束、类型擦除以及原始类型和泛型类型的转换。此外还讲解了在Java中使用泛型的好处以及如何在代码中使用泛型。
张拭心 shixinzhang
2018/01/05
2.2K0
java基础之泛型
泛型 术语 "?"通配符 通配符的扩展 自定义泛型方法 "擦除"实例 类型参数的类型推断 自定义泛型类 泛型方法和泛型类的比较 泛型和反射 通过反射获得泛型的实际类型参数 本文对泛型的基本
xiangzhihong
2018/02/01
1.1K0
java基础之泛型
Java 泛型进阶
在 List<String> 中添加 Integer 将不会通过编译,但是List<Sring>与List<Integer>在运行时的确是同一种类型。
yuxiaofei93
2018/09/11
8460
Kotlin 泛型详解
0. 引子 Kotlin 100% 与 Java 兼容,所以抛开语言表面上面的种种特质之外,背后的语言逻辑或者说“灵魂”与 Java 总是想通的。本文只涉及 Kotlin Jvm,Kotlin Js、Kotlin Native 的具体实现可能有差异。 最近一段时间在网上发了一套 Kotlin 的入门视频,涵盖了基础语法、面向对象、高阶函数、DSL、协程等比较有特色的知识点,不过有朋友提出了疑问:这门课为什么不专门讲讲泛型、反射和注解呢? 我最早听到这个问题的时候,反应比较懵逼,因为我居然没有感觉到 Kotl
腾讯Bugly
2023/04/02
1.3K0
Kotlin 泛型详解
(35) 泛型 (上) - 基本概念和原理 / 计算机程序的思维逻辑
之前章节中我们多次提到过泛型这个概念,从本节开始,我们就来详细讨论Java中的泛型,虽然泛型的基本思维和概念是比较简单的,但它有一些非常令人费解的语法、细节、以及局限性,内容比较多。 所以我们分为三节,逐步来讨论,本节我们主要来介绍泛型的基本概念和原理,下节我们重点讨论令人费解的通配符,最后一节,我们讨论一些细节和泛型的局限性。 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序。而容器类是基于泛型的,不理解泛型,我们就难以深刻理解容器类。那,
swiftma
2018/01/31
8220
泛型的基本原理
泛型是 JDK1.5 的一个新特性,其实就是一个『语法糖』,本质上就是编译器为了提供更好的可读性而提供的一种小「手段」,虚拟机层面是不存在所谓『泛型』的概念的。
Single
2018/07/31
6350
泛型的基本原理
游刃有余:玩转Java泛型
Java 中的泛型提供了一种创建可以处理不同类型数据的可重用代码的方法。它允许用户定义可操作各种数据类型的类、接口和方法,而无需牺牲类型安全性。在 Java 5 中引入的泛型已经成为 Java 编程语言的一个基本特性。
FunTester
2023/12/19
2620
游刃有余:玩转Java泛型
Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?
不久前,被人问到Java 泛型中的通配符 T,E,K,V,? 是什么?有什么用?这不经让我有些回忆起该开始学习Java那段日子,那是对泛型什么的其实有些迷迷糊糊的,学的不这么样,是在做项目的过程中,渐渐有又看到别人的代码、在看源码的时候老是遇见,之后就专门去了解学习,才对这几个通配符 T,E,K,V,?有所了解。
每周聚焦
2025/04/08
1650
Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?
Java基础不简单,泛型很重要!
其实在开发中经常会看到泛型的使用,但是很多人对其也是一知半解,大概知道这是一个类似标签的东西。比如最常见的给集合定义泛型。
java技术爱好者
2021/10/13
2870
Java基础不简单,泛型很重要!
(36) 泛型 (中) - 解析通配符 / 计算机程序的思维逻辑
上节我们介绍了泛型的基本概念和原理,本节继续讨论泛型,主要讨论泛型中的通配符概念。通配符有着令人费解和混淆的语法,但通配符大量应用于Java容器类中,它到底是什么?本节,让我们逐步来解析。 更简洁的参数类型限定 在上节最后,我们提到一个例子,为了将Integer对象添加到Number容器中,我们的类型参数使用了其他类型参数作为上界,代码是: public <T extends E> void addAll(DynamicArray<T> c) { for(int i=0; i<c.size; i
swiftma
2018/01/31
7440
Java 泛型详细解析
实际使用的时候就可以给这个 T 指定任何实际的类型,比如下面所示,就指定了实际类型为 LocalDate,泛型给了我们一个错觉就是通过个这个模板类 Pair<T>,我们可以在实际使用的时候动态的派生出各种实际的类型,比如这里的 Pair<LocalDate> 类。
javadaysdaysup
2024/12/01
4320
Java 泛型详细解析
【Java】Collection集合&泛型
👀专栏介绍 【Java】 目前主要更新Java,一起学习一起进步。 👀本期介绍 本期主要介绍Collection集合&泛型 文章目录 第一章 Collection集合 1.1 集合概述 1.2 集合框架 1.3 Collection 常用功能 第二章 Iterator迭代器 2.1 Iterator接口 2.2 迭代器的实现原理 2.3 增强for 第三章 泛型 3.1 泛型概述 3.2 使用泛型的好处 3.3 泛型的定义与使用 定义和使用含有泛型的类 含有泛型的方法 含有泛型的接口 3.4 泛型通配符
陶然同学
2023/02/27
5580
【Java】Collection集合&泛型
深入理解 Java 泛型
泛型要求在声明时指定实际数据类型,Java 编译器在编译时会对泛型代码做强类型检查,并在代码违反类型安全时发出告警。早发现,早治理,把隐患扼杀于摇篮,在编译时发现并修复错误所付出的代价远比在运行时小。
静默虚空
2022/03/23
4750
深入理解 Java 泛型
《Kotlin 极简教程 》第6章 泛型
通常情况的类和函数,我们只需要使用具体的类型即可:要么是基本类型,要么是自定义的类。
一个会写诗的程序员
2018/08/17
1.8K0
Kotlin入门潜修之类和对象篇—泛型及其原理
如果我们了解java中的泛型,那么本篇文章提到的kotlin泛型我们也不会陌生。但是如果之前没有接触过泛型或者没有真正理解泛型,本篇文章理解起来可能有些困难,不过我会尽量阐述的通俗易懂。
Android架构
2019/06/24
1K0
Java 泛型
本文介绍了Java中的泛型机制,主要包括泛型的定义、泛型类型的变量、泛型方法以及通配符等内容。同时,还讲解了在 Java 中如何使用泛型,以及需要注意的一些问题。
IT可乐
2018/01/04
1.7K0
Java 泛型
Java基础11:Java泛型详解
这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取 3T 免费技术学习资源以及我我原创的程序员校招指南、Java学习指南等资源)
程序员黄小斜
2019/04/07
5200
掌握8条泛型规则,打造优雅通用的Java代码
如果在添加对象时,不小心将不同类型的对象加入集合,那么获取对象强制转换时会发生报错
菜菜的后端私房菜
2024/07/26
2771
相关推荐
Collection<Number>与Collection<? extends Number>与Collection<?>
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档