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

原文:https://www . geesforgeks . org/grad le-build-tool-I-modern-open-source-build-automation/

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

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

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

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

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

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

主要特征:

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

我们也看到了代码长度和可读性的差异。因为所有这些特性以及其他一些特性,比如对多项目的支持等,Gradle 排名第一。

本文由 Ekta Goel 供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用contribute.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 contribute@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。

如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。