学新通技术网

【Gradle 学习】(一)认识构建工具

juejin 11 1
【Gradle 学习】(一)认识构建工具

1. 什么是构建工具?

以前 Android 开发是用 Eclipse, 而 Eclipse 是一种 IDE(Integrated Development Environment,集成开发环境)

eclipse

Eclipse 支持 Java 开发,而 Android 又是基于 Java 语言的,因此 Google 开发了一个叫 ADT(Android Developer Tools)的工具。

从此就可以在 Eclipse 进行 开发、运行、签名、打包等,在某种意义上 ADT 就是我们的构建工具。

自从 Google 推出 Android Studio 之后,就默认使用 Gradle 来作为构建工具了,并且在 Android Studio 2.2 之后就不再更新 ADT 了。

那么问题来了, 到底什么是构建工具?

构建工具是一个把 源代码生成可用的或可执行应用程序的过程 自动化的程序。

比如 Java 生成 Jar 包,或者在 Android 生成 .apk 的过程中,构建工具会对项目进行 编译、运行、签名、打包、依赖管理等一系列操作。

2. Java 中的构建工具

在 Java 语言中,常用的构建工具有 Ant、Maven、Gradle

2.1 Apache Ant

Apache Ant (Another Neat Tool)是一个用 Java 编写的开源的跨平台的项目构建工具。

Ant 不提供依赖管理器,所以需要自己管理外部依赖。但是 Ant 可以和 Apache lvy 很好的集成,lvy 是一个完善且独立的依赖管理器。

2.1.1 Ant 构建脚本

Ant 的一个构建脚本由三个基本元素构成:一个 Project、多个 Target 和可用的 Task。 ant 开发者需要显示的指定每一个任务,每个任务包含一组由 XML 编码的指令,必须在指令中明确告诉 Ant 源码在哪里,结果字节码存储在哪里,如何将这些字节码打包成 JAR 文件。Ant 没有生命周期,你必须定义任务和任务之间的依赖,还需要手工定义任务的执行序列和逻辑关系。这就无形中造成了大量的代码重复。

2.2 Apache Maven

Maven 是 Apache 组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建、测试、打包和部署。

Ant 的灵活性、不便于维护,Maven 选择了约定优于配置的思想,提供了标准的软件生命周期模型和构建模型,通过配置就能对项目进行全面的管理。Maven 将构建的过程抽象成一个个的生命周期过程,在不同的阶段使用不同的已实现插件来完成相应的实际工作,这种设计方法极大的避免了设计和脚本编码的重复,极大的实现了复用。

Maven 不仅是一个项目构建工具还是一个项目管理工具。它有约定的目录结构和生命周期,项目构建的各阶段各任务都由插件实现,开发者只需遵照约定的目录结构创建项目,再配置文件中生命项目的基本元素,Maven 就会按照顺序完成整个构建过程。Maven 的这些特性在一定程度上大大减少了代码的重复。

2.3.1 Maven 默认目录布局

Maven default layout

2.3.2 生命周期

Maven 基于构建生命周期的思想。每个项目都确切知道有哪些步骤去执行构建、打包和发布应用程序。

在构建生命周期每一个步骤都是一个阶段,这些阶段会被有序地执行。

下图展示了Maven 构建所预定义的阶段和他们执行的顺序。 Maven build lifecycle

2.3.3 构建脚本

Maven 构建脚本样例,名字是 pom.xml,这里要遵循默认约定,所以 Maven 会去 src/main/java 目录中找源代码

image.png

这里指定了一个依赖,声明的类库和传递的依赖会有 Maven 的依赖管理器下载。Maven 预配置从 Maven Center 下载依赖。指定其坐标即可。

2.3 Gradle

其中 Ant 和 Maven 都是基于 xml 来进行描述的,xml 是非常好的层级数据描述语言,但对于描述程序流程和构建逻辑却存在很多不足之处,随着构建脚本的复杂度增加,维护构建代码也越来越困难,脚本也越来越臃肿。

Gradle 是基于 JVM 构建工具的新一代版本

Gradle 使用的是一种基于 Groovy 的领域特定语言(DSL,Domain Specific Language),Groovy 是一门 JVM 语言,它提供了 Java 的语法糖。由于 Groovy 是在 Java 的基础上做了很多改进,所有 Java 语言的特性 Groovy 都支持,但是用起来更加灵活。所以完全可以混写 Java 和 Groovy。

DSL:直接点来讲,其实就是这个语言不通用,只能用于特定的某个领域,俗称“小语言”。因此DSL也是语言。

语法糖: 指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

  • 约定灵活
  • 强大的依赖管理
  • 可扩展的构建
  • 具有表达性的语言和强大的 API
  • 和其他构建工具的集成

小结

本篇主要介绍了 Java 中常用的构建工具,Ant、Maven 和 Gradle。

  • Ant 的构建语言是 xml,需要在指令中明确源码和结果存储位置,以及定义逻辑及依赖,不便于维护。
  • Maven 的构建语言也是 xml,依照「约定优于配置」的思想,提供了标准的软件声明周期模型和构建模型,实现了极大复用
  • Gralde 放弃了 xml 描述语言,使用了具有表达性的语言 Groovy,使得脚本更加灵活。

本文出至:学新通技术网

标签: