Gradle生命周期探究

最近在做Gradle知识整理,想做成一个系列,以此加深对Gradle的理解。
Gradle构建的生命周期可以分为三个阶段:初始化,配置,执行。下面将详细介绍各个阶段的工作。

初始化阶段

初始化阶段的工作主要是:初始化settings.gradle文件,获取setting实例。执行setting中的脚本,根据include字段,创建对应的project实例。设置构建需要的环境。
以下是初始化阶段提供的回调:
在这里插入图片描述
在setting.gradle文件下添加以下代码:


gradle.settingsEvaluated {
    println '【settings.gradle脚本执行完毕】'
}
gradle.projectsLoaded {
    println '【初始化阶段结束】'
}

build结果如下:
在这里插入图片描述

配置阶段

配置阶段主要的工作是:下载所有插件和构建脚本依赖。执行build.gradle文件中的脚本信息。实现task任务的拓扑图,这个图是一个有向无环图,防止任务执行进入死循环。
在这里插入图片描述
在setting.gradle文件下添加以下代码:

gradle.settingsEvaluated {
    println '【settings.gradle脚本执行完毕】'
}
gradle.projectsLoaded {
    println '【初始化阶段结束】'
}
gradle.beforeProject { project ->
    println "<gradle.beforeProject>  ${project.name}配置前"
}
gradle.afterProject { project ->
    println "<gradle.afterProject>  ${project.name}配置完成"
}
gradle.projectsEvaluated {
    println '【配置阶段结束】'
}
gradle.taskGraph.whenReady {
    println 'task 拓扑图构造完毕'
}

在app目录下的build.gradle文件下添加以下代码:

project.afterEvaluate { project ->
    println "<project.afterEvaluate>   ${project.name}配置完成"
}
task task1{
    println "<task1>    配置task1"
}

build结果如下:
在这里插入图片描述
从build打印的内容可以知道:每个Project在配置阶段都调了一次beforeProject和afterProject,所有的Project都配置完成后会调用projectsEvaluated,Task拓扑图构造完成后会调用taskGraph.whenReady。
除此之外,我们还能监听任务的添加操作。在app目录下的build.gradle文件下添加以下代码:

tasks.whenTaskAdded { task ->
    println "${project.name}添加task:${task.name}"
}
// 我们可以监听这个回调来配置一些任务依赖或修改某些变量
def preBuild = this.tasks.findByName('preBuild')
project.tasks.whenTaskAdded { task ->
    if (task.name == 'task1') {
        preBuild.dependsOn(task) // 执行preBuild之前会执行task
    }
}

部分build结果如下:
在这里插入图片描述在这里插入图片描述

执行阶段

根据配置阶段生成的任务拓扑图执行任务。
在这里插入图片描述
在setting.gradle文件下添加以下代码:

gradle.taskGraph.beforeTask { task ->
    println "<beforeTask>   ${task.name}执行前"
}
gradle.taskGraph.afterTask { task ->
    println "<afterTask>    ${task.name}执行后"
}
gradle.buildFinished {
    println '【构建过程结束】'
}

build结果如下:
在这里插入图片描述
中间省略部分task执行过程。。。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值