- 自动处理部署问题
过去 Java 开发者常用 Maven 和 Ant 等工具进行封装布署的自动化,或是两者兼用,不过这两个包彼此有优缺点:
- 如果频繁改变相依包版本,使用 Ant 相当麻烦,
- 如果琐碎工作很多,Maven 功能不足
- 而且两者都使用 XML 描述,相当不利于设计 if、switch 等判断式,即使写了可读性也不佳
而 Gradle 改良了过去 Maven、Ant 带给开发者的问题,至今也成为 Android Studio 内置的封装布署工具。
官方文档:What is Gradle?
Gradle 插件
Gradle 的核心是提供自动化处理流程。所有有用的特性,比如编译 Java 代码的能力,都是由插件添加的。
作用
插件实际的作用有:
- 拓展 Gradle Model (例如:添加可配置的新 DSL 元素)
- 根据约定配置项目(例如:添加新的 Gradle Task 或配置一些合理的默认值)
- 应用指定的配置(例如:添加一些仓库或执行标准)
好处
通过应用插件,而不是向项目构建脚本添加逻辑,可以获得的好处有:
- 提高复用能力,减少跨多个项目维护类似逻辑的开销:同一个插件可以应用到不同的项目。
- 更好的模块化:通过插件的形式,可以使项目架构更加明确更容易理解。
- 封装重要的逻辑,允许构建脚本尽可能具有声明性。
分类
Gradle 插件有两种类型,分为二进制插件和脚本插件。
- 二进制插件
二进制插件可以通过实现 org.gradle.api.Plugin
接口以编程方式编写,也可以使用 Gradle 的一种 DSL 语言以声明方式编写。
二进制插件可以驻留在构建脚本中、项目层次结构中或外部插件 jar 包中。
- 脚本插件
脚本插件是额外的构建脚本,可以进一步配置构建并且通常实现一种声明性的方法来操作构建。它们通常在构建中使用,尽管它们也可以外部化并从远程位置访问。
插件通常以脚本插件开始(因为它们易于编写),然后随着代码变得更有价值,它被迁移到可以在多个项目或组织之间轻松测试和共享的二进制插件。
使用插件
要使用插件中封装的构建逻辑,Gradle 需要执行两个步骤。 首先,解析插件,然后需要将插件应用到一个目标上,通常是一个 org.gradle.api.Project
对象。
- 解析插件
解析插件的工作是找到包含给定插件的正确版本的 jar 并将其添加到脚本类路径中。一旦一个插件被解析,它的 API 就可以在构建脚本中使用。
- 应用插件
应用插件意味着在要使用插件的项目上实际执行插件的Plugin.apply(T
。应用插件是_幂等_的。也就是说,您可以安全地多次应用任何插件而不会产生副作用。
本篇文章主要介绍如何实现一个二进制插件。
实现一个插件
最简单的构建