前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gradle Build Lifecycle

Gradle Build Lifecycle

作者头像
acc8226
发布2022-05-17 17:57:29
6600
发布2022-05-17 17:57:29
举报
文章被收录于专栏:叽叽西叽叽西

我们之前说过,Gradle 的核心是一种基于依赖性编程的语言。 在 Gradle 术语中,这意味着您可以定义任务和任务之间的依赖关系。 Gradle 保证这些任务按照其依赖项的顺序执行,并且每个任务只执行一次。 这些任务形成了一个有向无环图。 有一些构建工具可以在执行任务时建立这样的依赖关系图。 在执行任何任务之前,Gradle 构建完整的依赖关系图。 这位于 Gradle 的心脏地带,使许多事情成为可能,否则这些事情是不可能实现的。

您的构建脚本配置这个依赖关系图。因此,严格地说,它们是构建配置脚本。

Build phases 构建阶段

一个 Gradle 构建有三个不同的阶段。

  • Initialization 初始化
  • Configuration 配置
  • Execution 执行

Settings file 设置文件

在构建脚本文件旁边,Gradle 定义了一个设置文件。 设置文件由 Gradle 通过一个变数命名原则文件夹确定。 这个文件的默认名称是 settings.gradle。 在本章的后面,我们将解释 Gradle 如何查找设置文件。

设置文件在初始化阶段执行。 多项目构建必须在多项目层次结构的根项目中有 settings.gradle 文件。 这是必需的,因为设置文件定义了哪些项目正在参与多项目构建(参见创作多项目构建)。 对于单项目生成,设置文件是可选的。 除了定义所包含的项目之外,您可能还需要它将库添加到构建脚本类路径中(请参见 organizinggradle 项目)。 让我们首先用一个单独的项目构建做一些反思:

settings.gradle

代码语言:javascript
复制
println 'This is executed during the initialization phase.'

build.gradle

代码语言:javascript
复制
println 'This is executed during the configuration phase.'

task configured {
    println 'This is also executed during the configuration phase.'
}

task test {
    doLast {
        println 'This is executed during the execution phase.'
    }
}

task testBoth {
    doFirst {
      println 'This is executed first during the execution phase.'
    }
    doLast {
      println 'This is executed last during the execution phase.'
    }
    println 'This is executed during the configuration phase as well.'
}
代码语言:javascript
复制
> gradle test testBoth
This is executed during the initialization phase.

> Configure project :
This is executed during the configuration phase.
This is also executed during the configuration phase.
This is executed during the configuration phase as well.

> Task :test
This is executed during the execution phase.

> Task :testBoth
This is executed first during the execution phase.
This is executed last during the execution phase.

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed

对于生成脚本,属性访问和方法调用被委托给项目对象。 类似地,设置文件中的属性访问和方法调用也被委派给设置对象。 有关更多信息,请查看 API 文档中的 Settings 类。

Multi-project builds 多项目建设

多项目生成是在 Gradle 的单次执行期间生成多个项目的生成。 您必须在设置文件中声明参与多项目生成的项目。 关于多项目构建,在本主题的章节中还有很多要说的(请参阅创作多项目构建)。

多项目构建总是由具有单个根的树来表示。 树中的每个元素代表一个项目。 项目有一条路径,它表示项目在多项目生成树中的位置。 在大多数情况下,项目路径与项目在文件系统中的物理位置一致。 但是,此行为是可配置的。 项目树是在 settings.gradle 文件中创建的。 默认情况下,假定设置文件的位置也是根项目的位置。 但是您可以在设置文件中重新定义根项目的位置。

Building the tree

在设置文件中,您可以使用一组方法来生成项目树。 层次化和扁平化的物理布局得到了特殊的支持。

Hierarchical layouts 分层布局

settings.gradle

代码语言:javascript
复制
include 'project1', 'project2:child', 'project3:child1'

Include 方法将项目路径作为参数。 假设项目路径等于相对物理文件系统路径。 例如,默认情况下,路径“ services: api”映射到文件夹“ services / api”(相对于项目根目录)。 您只需指定树的叶子。 这意味着包含服务: 酒店: api 的路径将导致创建3个项目: 服务、服务: 酒店和服务: 酒店: api。 关于如何使用项目路径的更多示例可以在 Settings.include (java.lang)的 DSL 文档中找到。 String []).

Flat layouts 平面布局

settings.gradle

代码语言:javascript
复制
includeFlat 'project3', 'project4'

Includeflat 方法将目录名作为参数。 这些目录需要作为根项目目录的兄弟目录存在。 这些目录的位置被认为是多项目树中根项目的子项目。

Modifying elements of the project tree 修改项目树的元素

在设置文件中创建的多项目树由所谓的项目描述符组成。 您可以随时在设置文件中修改这些描述符。 要访问描述符,你可以这样做: settings.gradle

代码语言:javascript
复制
println rootProject.name
println project(':projectA').name

使用此描述符,您可以更改项目的名称、项目目录和生成文件。

settings.gradle

代码语言:javascript
复制
rootProject.name = 'main'
project(':projectA').projectDir = new File(settingsDir, '../my-project-a')
project(':projectA').buildFileName = 'projectA.gradle'
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Build phases 构建阶段
  • Settings file 设置文件
  • Multi-project builds 多项目建设
    • Building the tree
      • Hierarchical layouts 分层布局
      • Flat layouts 平面布局
    • Modifying elements of the project tree 修改项目树的元素
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com