📜  Gradle 构建工具 I 现代开源构建自动化

📅  最后修改于: 2021-10-21 05:40:57             🧑  作者: Mango

回想一下Java程序的运行过程,首先编译程序,在编译时创建字节码。在运行时,加载类,验证字节码,然后解释器读取字节码并执行指令。
这是怎么发生的?
我们只需单击构建然后运行,或者只是运行(构建自动发生)。你有没有想过为什么没有任何明确的需要给出加载类、创建字节码或链接等的命令?这就是自动化系统的由来。
引用,“构建自动化是自动创建软件构建和相关过程的过程,包括将源代码编译为字节码、打包二进制代码和运行自动化测试。”
例如,我们通常点击“Build”选项,系统本身会执行运行我们的源代码所需的所有过程,即它会自动执行所有任务(编译、加载、链接、打包等)并运行我们的代码。存在各种其他自动化系统,如 Apache Ant 和 Apache Maven。每个这样的系统都遵循一些约定。在这个自动化构建的世界中,“约定而不是配置”这句话非常有名。
假设您创建了一个包含大量类和资源(例如图像和布局文件)的项目。所有文件都保存在一个文件夹中,您将此项目交给其他人。那个人会不会很难理解?因此,构建系统遵循某些约定。就像每个项目都应该有这样的结构:

  • src文件夹:包含所有类
  • res文件夹:包含所有资源
  • manifest 文件夹:包含项目的配置。

这样,其他人就会知道整个源代码都保存在 src 文件夹下,而所有资源都保存在 res 文件夹下。类似地,根据应用程序使用的构建系统,还有其他用于保存测试文件和构建文件的约定。
有了这个,我们就明白了“Gradle 是一个构建自动化系统”这句话的意思。

  1. 领域特定语言:我们使用领域特定语言来描述与自动化源代码分析和转换相关的任务。它是一种专门用于特定应用领域的计算机语言。这些是专为特定任务而设计的小型、富有表现力的语言。一个例子是网页的 HTML。
    领域一词指的是“知识、影响或活动的领域或领域”,即 DSL 非常关注特定类型的问题或领域。专注于一个领域为我们提供了一个上下文,它定义了一个逻辑框架,我们可以在其中发展应用程序的模型,即给定某个领域,我们可以在逻辑上暗示所有属性和规则需要定义以解决特定于该领域的问题.
  2. 特定”一词为我们提供了有限的上下文,并有助于保持相关性和重点。
    例如:如果您在 Linux 系统上遇到过使用“makefile”,那么 makefile 是一个 DSL,用于指定构建应用程序的规则和依赖项。
    简单性是 DSL 成功的关键。熟悉语言领域的人一定很容易理解。我们可以在 DSL 中定义执行特定任务的依赖关系。例如,如果我们正在创建 DSL 来表达保险领域的业务规则,它应该建立在他们的词汇上,即应该使用贷款、风险、有效性等术语,人们每天使用的术语与他人交流,以便它易于理解、发展和维护。 DSL 似乎只是指定了一些离散的规则,而不是给人一种编程的感觉。

常规
它是一种面向对象的语言,也可以用作Java平台的脚本语言。它支持动态和静态类型。它在语法上与Java非常相似,但还有其他各种东西。默认情况下,它还包括各种库。
在您的系统和控制台上安装 Groovy,尝试运行一些Java代码。

在上面的截图中,我们没有包含任何库,只是按照我们在Java的方式打印 Hello world 。根据规范,分号、括号等可以在 Groovy 中删除。请参阅官方文档。 Groovy 是 Gradle 的基础语言,所有等级中的脚本都是使用 Groovy 实现的 DSL。

主要特点:

  • 最小化新项目所需的配置: Gradle 有一组默认配置设置,这些设置会自动应用于您在 Android Studio 中创建的每个项目。如果您正在开发不遵守这些默认配置规则的项目,Gradle 很容易自定义。
  • 声明项目依赖:依赖可以是模块、JAR 文件或库,它们可以位于本地文件系统或远程服务器上。如果您使用过 Eclipse,您一定遇到过需要您添加一些应用程序中的外部 JAR。您必须明确地按照所需版本正确下载它们并将它们添加到类路径变量中。 Gradle 是高效的,因为它只需在配置文件中指定所需的依赖项即可自动解决所有构建依赖项。它本身根据兼容版本下载和缓存。
  • 测试您的项目: Gradle 会从您项目的测试源自动生成一个测试目录和一个测试 APK,并且可以在构建过程中运行您的测试。
  • 击败所有其他自动化系统: Gradle 构建在现有构建系统之上,它结合了 Apache Ant 和 Maven 等系统的最佳特性,并消除了它们的缺点。其中最有特色的是它不使用 XML。开发人员称之为消除噪音。考虑以下屏幕截图,其中显示了 Apache Maven 和 Gradle 中的一个配置文件。

我们也看到了代码长度和可读性的差异。由于所有这些功能以及其他一些功能,例如支持多项目等,Gradle 排名第一。