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…

【INTEL(ALTERA)】Eclipse Nios II SBT 无法从模板创建新应用程序和 BSP

目录 说明 解决方法 说明 您应该能够创建新的应用程序和 BSP 模板包含以下步骤: 选择 Nios II应用程序和 BSP 来自模板。选择您的.sopcinfo 文件并选择模板。从您的工作区单击 选择现有的 BSP 项目。单击 创建。选择所需的 BSP 选项。单击 完成。 但是&#xf…

API 安全策略和基础指南

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

PostgreSQL教程:开启您的数据库之旅

PostgreSQL教程:开启您的数据库之旅 PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它以其强大的功能、稳定性和高度的可扩展性而闻名。作为一个功能丰富的数据库系统,PostgreSQL支持复杂的查询、强大的事…

Python 面试题解析

Python 面试题解析 Python 作为一种广泛使用的编程语言,其面试题目通常覆盖了语言基础、数据结构、算法、设计模式、Web 开发、测试、数据库、系统设计等多个方面。以下是一些常见的 Python 面试题及其解析,使用 Markdown 格式编写。 1. Python 基础 …

Linux-笔记 OverlayFS文件系统小应用

前言 通过另一章节 OverlayFS文件系统入门 中已经大致了解了原理,这里来实现一个小应用。

大模型性能优化KV Cache

原理 KV Cache的本质就是避免重复计算,把需要重复计算的结果进行缓存,生成式模型的新的token的产生需要用到之前的所有token的 K , V K,V K,V,在计算注意力的时候是当前的 Q Q Q和所有的 K , V K,V K,V来进行计算,所以是缓存 K ,…

打破数据分析壁垒: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;因此我们可以使用第一行的元素来记录对应的…

Java SpringBoot 打包后 获取文件 打包后找不到文件 解决方法

在SpringBoot下 本地运行获取项目下的文件是没问题的&#xff0c;在打包后获取则找不到文件 原因&#xff1a; 在Spring Boot项目中&#xff0c;当尝试访问项目下的文件时&#xff0c;本地开发环境和打包后的运行环境可能会有所不同。在本地开发时&#xff0c;通常可以直接通过…

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

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

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

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

终端基本指令使用不了

当你修改了~/.zshrc文件后发现像ls、vim这样的基本命令无法使用&#xff0c;这通常意味着你的PATH环境变量可能被错误地修改或覆盖了&#xff0c;导致shell无法找到这些命令的可执行文件。以下是几个可能的原因和解决方法&#xff1a; PATH变量被错误修改&#xff1a; 确认你没…

利用flex来布局顶部菜单栏

安装vscode插件 css peek&#xff1a;快速定位到css定义的位置 微软的live preview 替换live server 因为这个好像不支持utf8 前置css知识 span标签是一个行内容器&#xff0c;用于标记文本的一部分&#xff0c;或文档的一部分。它与 div 非常相似&#xff0c;但 div 是块级…

数据结构——带头双向循环链表(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; 我们在前几期详细地讲解了不带头单…

vue下载本地xls模版静态文件

需求导入的下载模版不想放在服务器放在前端本地下载静态资源最简单的方式直接访问 public 文件夹下的文件 方法一&#xff1a;使用静态文件路径 将文件放在 public 文件夹中&#xff1a; 把你的文件从 src/assets 移动到 public 文件夹。例如&#xff1a;public/template.xls。…