首页 > 其他分享 >Gradle构建之生命周期

Gradle构建之生命周期

时间:2022-10-20 23:06:43浏览次数:42  
标签:插件 task init gradle Task 生命周期 构建 Gradle 执行

Gradle是一个框架,作为框架,它负责定义流程和规则。而具体的编译工作则是通过插件的方式来完成的。比如编译Java有Java插件,编译Groovy有Groovy插件,编译Android APP有Android APP插件,编译Android Library有Android Library插件。Gradle中每一个待编译的工程都是一个Project,一个具体的编译过程是由一个一个的Task来定义和执行的。一个Project到底包含多少个Task,其实是由编译脚本指定的插件决定。插件是什么呢?插件就是用来定义Task,并具体执行这些Task的东西

项目结构

gradle项目目录结构:

除了build.gradle(构建的说明书)其他的文件是gradlewrapper相关的

Gradle的生命周期

gradlelifecycle:

  • initialization:执行两个脚本init.gradle , settting.gradle; init用于创建全局的Gradle对象 判断是单项目构建还是多项目构建;Setting用于决定哪些项目参与到构建中,为每个项目创建一个Project

init.gradle是当前机器所有Grdale所有项目公用的,配置全局的init.gradle文件需要放在GRADLE_USER_HOME指代的gradle文件夹的init.d下面。

init.d中的init.gradle有initscript 脚本块,和普通gradle不一样的是执行脚本会先调用initscript 方法,可在此处添加三方依赖。

跟项目只有.gradle有意义,每个Gradle项目都必须有一个.gradle构建脚本,在之后的配置阶段会根据这个构建脚本的内容去创建对应的Projcet对象

  • Configuration配置阶段:执行build.gradle文件【创建task,执行task的闭包去配置这个task的Action】,对上一步生成的project进行设置(有哪些任务,任务之间的依赖,应用了哪些插件等)

Action其实就是doLast,doFirst这些。配置阶段去配置这个task的Action及各个task之间的依赖关系,对Projcet添加Task,等到执行阶段的时候在执行Task里面的Action

  • Execution:执行阶段,针对project 真正的运行task,根据配置阶段生成的task依赖和添加任务列表进行执行

gradle执行的最小单元是task任务,任何无主函数都可以在Project中找到

Task创建示例

比如denpendes依赖其他task,在执行这个task之前会先执行依赖的task。

特殊的钩子函数

钩子函数并不会像普通task一样按照从上到下的顺序执行,他的执行依赖于特定的方法,比如afterEveluatetask,这个task的执行时机是在配置完成阶段将build.gradle都执行完的时候去执行的(当然也会执行普通task闭包用于确定配置这个task)。

在配置阶段碰到这类task的时候会把它们添加到一个待执行的列表中,等待合适时机在调用。


调用完钩子函数之后就进入到了Eveluate阶段,这个阶段会去执行gradlew指定的task任务,也就是执行配置阶段已经配置了这个task的任务列表


Task的type属性

type属性用于创建指定task,从而可以使用这个Task内的方法

比如copy这个系统的task,我们创建的task的type属性指定了copy,那么在我们创建的task闭包中就可以使用一系列copytask的方法

比如:

复制图片:多个数据源 -->

public AbstractCopyTask renam

复制文件:过滤文件,重命名 -->

标签:插件,task,init,gradle,Task,生命周期,构建,Gradle,执行
From: https://blog.51cto.com/u_14689064/5780625

相关文章

  • 吐血整理python数据分析利器pandas的八个生命周期!
    这里从八个pandas的数据处理生命周期,整理汇总出pandas框架在整个数据处理过程中都是如何处理数据的。【阅读全文】也就是从pandas的数据表对象以及数据汇总、数据统计等......
  • jenkins的几种构建方式
    几种构建方式快照依赖构建/BuildwheneveraSNAPSHOTdependencyisbuilt当依赖的快照被构建时执行本job触发远程构建(例如,使用脚本)远程调用本job的restapi时......
  • 8-jenkins windows环境下配置自动构建启动项目(springboot,gitlab,maven)
    由于远程办公原因,所以我们的服务必须在一个内网,所以就想到使用jenkins来实现提交后自动构建项目启动,不需要再登录到内网操作。jenkins的安装很简单,网上一大片,然后gitlab......
  • 基础篇——三、组件的生命周期
    三、组件的生命周期只有类组件才有生命周期,函数组件没有生命周期1,挂载阶段被创建,执行初始化,并被挂载到dom,完成第一次渲染。依次调用:constructor是es6class的构造方......
  • CentOS构建FTP服务,基于虚拟用户访问
    CentOS构建FTP服务,基于虚拟用户访问CentOS7.5安装vsftp服务Server_IP:192.168.1.10基础安装#yumsearchall--showduplicatesvsftpd#yuminstallvsftpd-3.0.2......
  • 你心目中的企业应用开发框架该怎样构建?
    企业应用开发框架应该是扁平的,也就是说需要什么样的应用直接添加,需要什么样的数据接入也直接添加接口即可,不管是设备数据还是用户输入数据。我觉得xPlus(3UCS)的那种完全创新......
  • Vue生命周期
    Vue生命周期生命周期就是我们从开始创建vue实例到销毁的一个过程,这一过程就叫做生命周期。方便我们在vue的各个阶段对其属性进行操作生命周期示例-----newVue实例化Vu......
  • 安装 jenkins实现自动编译、打包、构建镜像、容器部署
      1、部署JDK maven 并进行解压重命名cd/usr/localtar-xvfjdk-8u60-linux-x64.tar.gztar-xvfapache-maven-3.3.9-bin.tar.gzmvapache-maven-3.3.9mave......
  • 如何高性价比地构建GPU环境,实现GPU自由?
     Datawhale 主题:构建GPU环境引言:要做深度学习,必然需要GPU,如何构建一个弹性的GPU环境是很多读者关心和常问的问题,今天主要分享关于云服务器的选择。由于购买GPU价格高昂......
  • React:生命周期函数
    生命周期钩子详解定义:在特定的阶段,ne你刚刚自动执行的函数(方法)。componentWillMount:在渲染前调用,在客户端也在服务端。componentDidMount:在第一次渲染后调用,只......