Gradle【从无到有从有到无】【用户手册】【G1】什么是Gradle?

目录

总览

1.高性能

2.JVM基础

3.约定

4.可扩展性

5.IDE支持

6.洞察力

您需要了解有关Gradle的五件事

1.Gradle是通用的构建工具

2.核心模型基于任务

3.Gradle有几个固定的构建阶段

4.Gradle的扩展方式不止一种

5.构建脚本针对API运行


总览

Gradle是一个开放源代码的构建自动化工具,旨在灵活地构建几乎任何类型的软件。以下是其一些最重要功能的高级概述:

1.高性能

Gradle通过仅运行需要运行的任务来避免不必要的工作,因为它们的输入或输出已更改。您还可以使用构建缓存来重用以前运行的任务输出,甚至可以重用其他机器(带有共享构建缓存)的任务输出。

Gradle实施了许多其他优化,并且开发团队不断努力提高Gradle的性能。

2.JVM基础

Gradle在JVM上运行,并且必须安装Java开发工具包(JDK)才能使用它。对于熟悉Java平台的用户来说,这是一个好处,因为您可以在构建逻辑中使用标准Java API,例如自定义任务类型和插件。它还使在不同平台上运行Gradle变得容易。

请注意,Gradle不仅限于构建JVM项目,它甚至附带对构建本机项目的支持。

3.约定

Gradle从Maven的书中摘取了叶子,并通过实现约定使常见类型的项目(例如Java项目)易于构建。应用适当的插件,您可以轻松地为许多项目使用苗条的构建脚本。但是这些约定并不限制您:Gradle允许您覆盖它们,添加自己的任务以及对基于约定的构建进行许多其他自定义。

4.可扩展性

您可以轻松扩展Gradle以提供您自己的任务类型甚至构建模型。有关此示例,请参见Android构建支持:它添加了许多新的构建概念,例如口味和构建类型。

5.IDE支持

几个主要的IDE允许您导入Gradle构建并与其进行交互:Android Studio,IntelliJ IDEA,Eclipse和NetBeans。Gradle还支持生成将项目加载到Visual Studio所需的解决方案文件。

6.洞察力

构建扫描提供了有关构建运行的广泛信息,可用于识别构建问题。他们特别擅长帮助您确定构建性能的问题。您还可以与其他人共享构建扫描,如果您在解决构建问题时需要征求意见,这将特别有用。

 

您需要了解有关Gradle的五件事

Gradle是一种灵活而强大的构建工具,当您初次启动时,很容易感到恐惧。但是,了解以下核心原则将使Gradle更加容易上手,并且您将在不知道该工具的情况下熟练掌握该工具。

 

1.Gradle是通用的构建工具

Gradle允许您构建任何软件,因为它对正在尝试构建的内容或应如何完成的工作做出很少的假设。最明显的限制是,依赖项管理当前仅支持与Maven和Ivy兼容的存储库以及文件系统。

这并不意味着您需要做很多工作来创建构建。Gradle通过添加一层约定和通过插件预先构建的功能,可以轻松构建常见类型的项目(例如Java库)。您甚至可以创建和发布自定义插件来封装自己的约定并构建功能。

 

2.核心模型基于任务

Gradle将其构建模型建模为任务(工作单元)的有向无环图(DAG)。这意味着构建实质上配置了一组任务,并根据它们的依赖关系将它们连接在一起以创建该DAG。创建任务图后,Gradle将确定需要按顺序运行的任务,然后继续执行它们。

此图显示了两个示例任务图,一个是抽象图,另一个是具体图,其中任务之间的依赖性表示为箭头:

图1. Gradle任务图的两个示例

这样,几乎所有构建过程都可以建模为任务图,这就是Gradle如此灵活的原因之一。任务图既可以由插件定义,也可以由您自己的构建脚本定义,任务通过任务依赖机制链接在一起。

任务本身包括:

  • 动作(Actions)-做某事的工作,例如复制文件或编译源代码

  • 输入(Inputs)-操作使用或对其进行操作的值,文件和目录

  • 输出(Outputs)-操作修改或生成的文件和目录

实际上,以上所有内容都是可选的,具体取决于任务需要执行的操作。有些任务(例如标准生命周期任务)甚至没有任何动作。他们只是为了方便而将多个任务聚合在一起。

✨您选择要运行的任务。通过指定执行所需任务的任务来节省时间,但仅此而已。如果您只想运行单元测试,请选择执行该任务的任务-通常为test。如果要打包应用程序,则大多数构建都有一个assemble任务。

最后一件事:Gradle的增量构建支持是可靠且可靠的,因此,clean除非您确实想执行清理工作,否则避免执行该任务以保持构建快速运行。

 

3.Gradle有几个固定的构建阶段

重要的是要了解Gradle分三个阶段评估和执行构建脚本:

  1. 初始化

    设置构建环境,并确定哪些项目将参与其中。

  2. 组态

    构造和配置用于构建的任务图,然后根据用户要运行的任务确定需要运行的任务和顺序。

  3. 执行

    运行在配置阶段结束时选择的任务。

这些阶段构成了Gradle的Build Lifecycle

✨与Apache Maven术语的比较

Gradle的构建阶段与Maven的阶段不同。Maven使用其阶段将构建执行划分为多个阶段。它们的作用与Gradle的任务图相似,但灵活性较差。

Maven的构建生命周期概念与Gradle的生命周期任务大致相似。

设计良好的构建脚本主要由声明性配置而不是命令式逻辑组成。可以理解,在配置阶段评估该配置。即便如此,许多此类构建也具有任务操作(例如,通过doLast {}doFirst {}块),这些任务在执行阶段进行评估。这很重要,因为在配置阶段评估的代码不会看到在执行阶段发生的更改。

配置阶段的另一个重要方面是,每次构建运行时都会评估其中涉及的所有内容。这就是为什么最佳做法是在配置阶段避免昂贵的工作构建扫描可以帮助您识别此类热点。

 

4.Gradle的扩展方式不止一种

如果您可以仅使用Gradle捆绑的构建逻辑来构建项目,那将是很好的,但这几乎是不可能的。大多数构建都有一些特殊要求,这意味着您需要添加自定义构建逻辑。

Gradle提供了多种机制来扩展它,例如:

  • 自定义任务类型

    当您希望构建完成现有任务无法完成的工作时,只需编写自己的任务类型即可。通常最好将自定义任务类型的源文件放在buildSrc目录或打包的插件中。然后,您可以像Gradle提供的任何任务一样使用自定义任务类型。

  • 自定义任务操作。

    您可以通过Task.doFirst()Task.doLast()方法附加在任务之前或之后执行的自定义构建逻辑。

  • 项目和任务的额外属性

    这些允许您将自己的属性添加到项目或任务中,然后可以从您自己的自定义操作或任何其他构建逻辑中使用它们。额外的属性甚至可以应用于您未明确创建的任务,例如Gradle的核心插件创建的任务。

  • 自定义约定。

    约定是简化构建的强大方法,因此用户可以更轻松地理解和使用它们。使用标准项目结构和命名约定的构建(例如Java build)可以看出这一点。您可以编写自己的提供约定的插件-它们只需要为构建的相关方面配置默认值。

  • 自定义模型

    Gradle允许您将新概念引入除任务,文件和依赖项配置之外的内部版本。您可以在大多数语言插件中看到这一点,这些插件将源集的概念添加到了构建中。构建过程的适当建模可以大大提高构建的易用性及其效率。

 

5.构建脚本针对API运行

将Gradle的构建脚本视为可执行代码很容易,因为这就是它们。但这只是一个实现细节:精心设计的构建脚本描述了构建软件所需的步骤,而不是这些步骤应如何工作。 这是定制任务类型和插件的工作。

✨人们普遍误认为Gradle的功能和灵活性来自其构建脚本是代码这一事实。这离事实还远。提供功能的是底层模型和API。正如我们在最佳实践中建议的那样,您应该避免在构建脚本中放置太多(如果有)命令式逻辑

然而,在一个区域中,将构建脚本视为可执行代码很有用:了解构建脚本的语法如何映射到Gradle的API。由Groovy DSL参考Javadocs组成的API文档列出了方法和属性,并引用了闭包和操作。这些在构建脚本的上下文中是什么意思?查看Groovy Build Script Primer,以了解该问题的答案,以便您可以有效地使用API​​文档。

✨由于Gradle在JVM上运行,因此构建脚本也可以使用标准Java API。Groovy构建脚本可以另外使用Groovy API,而Kotlin构建脚本可以使用Kotlin。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章