Gradle学习-3 Gradle构建的生命周期

Gradle常用文件目录
在这里插入图片描述

Gradle 构建的生命周期,有3个阶段:

  • 初始化阶段
  • 配置阶段
  • 执行阶段

1、初始化阶段

  • Gradle 支持构建单个工程个多个子工程,初始化阶段主要负责收集所有参与本次构建的子工程,创建一个项目的层次结构,并未每个项目创建一个 project 实例。与该阶段关系最大的就是根目录下的 setting.gradle 文件。

可以在 setting.gradle中添加Gradle构建生命周期监听

setting.gradle

println("[Gradle生命周期] - 我是 setting.gradle")//Gradle构建生命周期监听
gradle.addBuildListener(new BuildAdapter() {@Overridevoid settingsEvaluated(Settings settings) {super.settingsEvaluated(settings)println("[Gradle生命周期] - 初始化阶段完成")}@Overridevoid projectsEvaluated(Gradle gradle) {super.projectsEvaluated(gradle)println("[Gradle生命周期] - 配置阶段完成")}@Overridevoid buildFinished(BuildResult result) {super.buildFinished(result)println("[Gradle生命周期] - 构建结束")}
})

执行效果
在这里插入图片描述

从执行结果可以看出,初始化阶段主要是执行 setting.gradle 文件。

2、配置阶段

  • 配置阶段主要是执行各个目录下的 build.gradle 文件,并且根据项目的配置去构建一个任务依赖的关系图,以便在执行阶段执行

在根目录的build.gradle文件末尾添加

println("[Gradle生命周期] - 我是根目录build.gradle")

在app目录的build.gradle文件末尾添加

println("[Gradle生命周期] - 我是app目录build.gradle")

执行结果

在这里插入图片描述
可以看到,初始化完成之后,便依次执行各个目录中的build.gradle

3、执行阶段

  • 主要负责把配置阶段生成的 任务依赖图 依次去执行

在 app 目录的 build.gradle 末尾添加

println("[Gradle生命周期] - 我是app目录build.gradle")task testTask(){doLast {println("[Gradle生命周期] - 我是app目录build.gradle中的testTask")}
}

执行命令

./gradlew :app:testTask -q

执行结果

在这里插入图片描述

可以看到,配置阶段完成后,便开始执行 task

4、Gradle构建过程中,几个重要角色

阶段角色
初始化阶段rootProject
配置阶段project
执行阶段task
  • 初始化阶段,主要是执行 setting.gradle,可以在setting.gradle中拿到 rootProject,并且之后的阶段都可以使用 rootProject
  • 配置阶段,就可以拿到所有子工程的project实例了
  • 执行阶段,task是Gradle构建中执行的最小单元,我们所有的构建、编译、打包,都是有一个个task组成的,一个project中可以有多个task,task之间还可以相互依赖的

在setting.gradle中添加

println("[Gradle生命周期] - 我是 setting.gradle")
//初始化阶段可以拿到 rootProject
println("[Gradle生命周期] - rootProject路径:${rootProject.projectDir}")//Gradle构建生命周期监听
gradle.addBuildListener(new BuildAdapter() {@Overridevoid settingsEvaluated(Settings settings) {super.settingsEvaluated(settings)println("[Gradle生命周期] - 初始化阶段完成")}@Overridevoid projectsEvaluated(Gradle gradle) {super.projectsEvaluated(gradle)println("[Gradle生命周期] - 配置阶段完成")//配置阶段可以拿到projectgradle.rootProject.childProjects.each {name, pro->println("[Gradle生命周期] - 子工程{ 名称:$name    路径:${pro.projectDir} }")}}@Overridevoid buildFinished(BuildResult result) {super.buildFinished(result)println("[Gradle生命周期] - 构建结束")}
})

在app目录下的build.gradle添加

println("[Gradle生命周期] - 我是app目录build.gradle")
//配置阶段可以拿到project
println("[Gradle生命周期] - {  工程名:${project.name}   工程路径:${project.projectDir}  }")
//project可以拿到很多参数,如父工程,任务等,可以点击查看源码
println("[Gradle生命周期] - {  父工程:${project.parent.name}   父工程路径:${project.parent.projectDir}  }")
project.tasks.each {println("[Gradle生命周期] - app子工程中的任务:{  任务名:${it.name}   任务路径:${it.path}")
}

在根目录子的build.gradle添加

println("[Gradle生命周期] - 我是根目录build.gradle")
//配置阶段可以拿到project
println("[Gradle生命周期] - {  工程名:${project.name}   工程路径:${project.projectDir}  }")
//project可以拿到很多参数,如任务等,可以点击查看源码
project.tasks.each {println("[Gradle生命周期] - 根目录工程中的任务:{  任务名:${it.name}   任务路径:${it.path}")
}

执行结果
在这里插入图片描述

在这里插入图片描述

补充:创建任务

在 app目录的build.gradle中添加

task testTask1() {doLast {println("[Gradle生命周期] - 我是app目录build.gradle中的testTask1")}
}task testTask2() {//testTask2依赖testTask1dependsOn testTask1doLast {println("[Gradle生命周期] - 我是app目录build.gradle中的testTask2")}
}

执行命令

./gradlew :app:testTask2 -q

执行结果

在这里插入图片描述

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

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

相关文章

SpringBoot优点达项目实战:获取系统配置接口(三)

SpringBoot优点达项目实战:获取系统配置接口(二) 文章目录 SpringBoot优点达项目实战:获取系统配置接口(二)1、查看接口2、查看数据库3、代码实现1、创建实体类SysConfig2、创建返回数据的vo3、创建control…

API 安全策略和基础指南

API 是当今数字创新计划的核心,已成为应用程序的头号攻击载体。了解什么是 API 安全、为什么它如此重要,以及如何保护您的 API 免受现代威胁至关重要。 什么是 API 安全? 应用程序编程接口(API)是现代应用程序的基石…

打破数据分析壁垒:SPSS复习必备(九)

有序定性资料统计推断 1.分类 单向有序行列表 双向有序属性相同行列表 双向有序属性不同行列表 2.单向有序行列表 秩和检验 ① 两组单向有序分类资料 ②多组单向有序定性资料 步骤: 1.建立检验假设和确定检验水准 2.编秩 3.求秩和 4.确定检验统计量 5…

按位与、或、异或操作符

目录 & --- 按位与操作符 按位与操作符运用规则 按位与操作符相关代码 按位与操作符相关代码验证 | --- 按位或操作符 按位或操作符运用规则 按位或操作符相关代码 按位或操作符相关代码验证 ^ --- 按位异或操作符 按位异或操作符运用规则 按位异或操作符相关代…

分页组件 vue/uniapp

失效如上图 1.父组件调用 <onion-pagination :page.sync="todusGameQuery.pageSize" @update:page="changeTodusLoadMore":pageSize="todusGameQuery.pageNum" :total="todusGameTotal"></onion-pagination> 2.组件封装…

海纳斯 hinas 的hi3798mv100 华为悦盒 6108v9 安装wifi模块

hi3798mv100安装wifi模块 1.执行脚本 &#xff0c;执行完毕后重启服务器2. 继续执行脚本3.检查网卡驱动安装是否正确4.查看网卡安装状态5.连接wifi结尾 1.执行脚本 &#xff0c;执行完毕后重启服务器 bash <(curl -sSL https://gitee.com/xjxjin/scripts/raw/main/install_…

【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为推动科技进步的重要力量。而在NLP领域&#xff0c;Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度&#xff0c;为您深…

Leetcode Hot100之矩阵

1. 矩阵置零 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路 题目要求进行原地更改&#xff0c;也就是不能使用额外的空间&#xff0c;因此我们可以使用第一行的元素来记录对应的…

Python自动造波器椭圆曲线波孤子解

&#x1f3af;要点 &#x1f3af;快速傅立叶变换算法周期域解椭圆曲线波 | &#x1f3af;算法数值解孤波脉冲和结果动画 | &#x1f3af;三种语言孤子解浅水表面波方程 | &#x1f3af;渐近分解算法孤子波 | &#x1f3af;自适应步长算法孤子波 | &#x1f3af;流体自动造波器…

基于STM32的智能家庭安防系统

目录 引言环境准备智能家庭安防系统基础代码实现&#xff1a;实现智能家庭安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;家庭安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家庭安防系统通过使用ST…

数据结构——带头双向循环链表(c语言实现)

目录 1.单链表和双向链表对比 2.双向链表实现 2.1 创建新节点 2.2 链表初始化 2.3 尾插 2.4 头插 2.5 尾删 2.6 头删 2.7 查找 2.8 指定位置后插入数据 2.9 删除指定节点 2.10 销毁链表 2.11 打印链表 前言&#xff1a; 我们在前几期详细地讲解了不带头单…

一个项目学习Vue3---快速认识JSX

JSX&#xff08;JavaScript XML&#xff09;是一种用于在React框架中编写UI组件的语法扩展。它允许开发者将HTML标记直接嵌入到JavaScript代码中&#xff0c;使得在React组件中编写界面变得更加直观和高效。在编译过程中&#xff0c;JSX会被转换成普通的JavaScript对象&#xf…

工业液晶屏G065VN01 V2规格书简介

G065VN01 V2 背面实物图 2. 概述 G065VN01 V2 专为 VGA &#xff08;640 x RGB x 480&#xff09; 分辨率和 16.2M&#xff08;RGB 6 位 FRC&#xff09;或 262k 色&#xff08;RGB 6 位&#xff09;的工业显示应用而设计。它由TFT-LCD面板、驱动IC、控制和电源电路板以及包括…

css3实现水纹进度条

其实有一个mask-image属性 挺有意思&#xff0c;在元素上面实现遮罩层的效果&#xff0c;不过这玩意有些兼容性问题 需要处理&#xff0c;所以单纯可以通过渐变色的方式来实现 同时加上动画效果 .jianbian {width: 100%;height: 16px;background-color: #eee;display: flex;bor…

华三中小企业组网

一、组网需求 在中小园区中&#xff0c;S5130系列或S5130S系列以太网交换机通常部署在网络的接入层&#xff0c;S5560X系列或 S6520X系列以太网交换机通常部署在网络的核心&#xff0c;出口路由器一般选用MSR系列路由器。 核心交换机配置VRRP保证网络可靠性。园区网中不同的…

MySQL进阶——锁

目录 1全局锁—一致性数据备份 1.1全局锁介绍 1.2语法 1.3 一致性备份案例 1.4 全局锁特点 2表级锁 2.1表锁 2.1.1共享读锁 2.1.2独占写锁 2.2元数据锁 2.3元数据锁 MySQL中的锁&#xff0c;按照锁的粒度分&#xff0c;分为以下三类&#xff1a; &#xff08;1&…

GitLab配置免密登录之后仍然需要Git登录的解决办法

GitLab配置免密登录之后仍然需要Git登录的解决办法 因为实习工作需要&#xff0c;要在本地拉取gitlab上的代码&#xff0c;设置了密钥之后连接的时候还需要登录的token&#xff0c;摸索之后有了下面的解决办法。 方法一&#xff1a; 根据报错的提示&#xff0c;去网站上设置个人…

动手学自然语言处理:解读大模型背后的核心技术

自从 ChatGPT 横空出世以来&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09; 研究领域就出现了一种消极的声音&#xff0c;认为大模型技术导致 NLP “死了”。在某乎上就有一条热门问答&#xff0c;大家热烈地讨论了这个问题。 有…

【STM32】看门狗

1.看门狗简介 看门狗起始就是一个定时器&#xff0c;从功能上说它可以让微控制器在程序发生意外&#xff08;程序进入死循环或跑飞&#xff09;的时候&#xff0c;能重新恢复到系统刚上电状态&#xff0c;以保障系统出问题的时候可以重启一次。说的简单一点&#xff0c;看门狗…

用英文介绍孟买:Mumbai India‘s Transforming MEGACITY

Mumbai: India’s Transforming MEGACITY Link: https://www.youtube.com/watch?vtWD_-Rzrn8o Summary First Paragraph: Mumbai, India’s financial and entertainment capital, is undergoing a major transformation. With its contiguous urban population nearing 25…