Gradle - 插件
插件只不过是所有有用任务的集合,例如编译任务、设置域对象、设置源文件等都是由插件处理的。将插件应用到项目意味着它允许插件扩展项目的功能。
这些插件可以执行以下操作:
扩展基本的 Gradle 模型(例如添加可配置的新 DSL 元素)。
根据转换配置项目(例如添加新任务或配置合理的默认值)。
应用特定配置(例如添加组织存储库或强制执行标准)。
插件类型
Gradle 中有两种类型的插件,如下所示 -
脚本插件- 脚本插件是一个附加的构建脚本,它提供了一种声明性的方法来操作构建。这通常在构建中使用。
二进制插件- 二进制插件是实现插件接口并采用编程方法来操作构建的类。二进制插件可以驻留在构建脚本、项目层次结构中或外部插件 JAR 中。
应用插件
Project.apply() API 方法用于应用特定插件。您可以多次使用同一个插件。插件有两种类型,一种是脚本插件,另一种是二进制插件。
脚本插件
脚本插件可以从本地文件系统或远程位置的脚本应用。文件系统位置相对于项目目录,而远程脚本位置指定 HTTP URL。
看一下下面的代码片段。它用于将other.gradle插件应用到构建脚本。在build.gradle文件中使用此代码。
apply from: 'other.gradle'
二进制插件
每个插件均由插件 id 标识。一些核心插件使用短名称来应用插件 ID,一些社区插件使用插件 ID 的完全限定名称。有时,它允许指定插件的类。
看一下下面的代码片段。它展示了如何使用 java 插件的类型来应用它。在build.gradle文件中使用以下代码。
apply plugin: JavaPlugin
查看以下使用短名称应用核心插件的代码。在build.gradle文件中使用此代码。
plugins { id 'java' }
查看以下使用短名称应用社区插件的代码。在build.gradle文件中使用此代码。
plugins { id "com.jfrog.bintray" version "0.4.1" }
编写自定义插件
创建自定义插件时,您需要编写插件的实现。Gradle 实例化插件并使用 Plugin.apply() 方法调用插件实例。
以下示例包含一个问候插件,它将向项目添加一个 hello 任务。查看以下代码并在build.gradle build.gradle 文件中使用此代码。
apply plugin: GreetingPlugin class GreetingPlugin implements Plugin<Project> { void apply(Project project) { project.task('hello') << { println "Hello from the GreetingPlugin" } } }
使用以下代码来执行上述脚本。
C:\> gradle -q hello
输出
这会产生以下输出 -
Hello from the GreetingPlugin
从构建中获取输入
大多数插件需要构建脚本的配置支持。Gradle 项目有一个关联的 ExtensionContainer 对象,有助于跟踪传递给插件的所有设置和属性。
让我们向项目添加一个简单的扩展对象。在这里,我们向项目添加了一个问候语扩展对象,它允许您配置问候语。在build.gradle文件中使用此代码。
apply plugin: GreetingPlugin greeting.message = 'Hi from Gradle' class GreetingPlugin implements Plugin<Project> { void apply(Project project) { // Add the 'greeting' extension object project.extensions.create("greeting", GreetingPluginExtension) // Add a task that uses the configuration project.task('hello') << { println project.greeting.message } } } class GreetingPluginExtension { def String message = 'Hello from GreetingPlugin' }
使用以下代码执行上述脚本 -
C:\> gradle -q hello
输出
当您运行代码时,您将看到以下输出 -
Hi from Gradle
在此示例中,GreetingPlugin 是一个简单的旧 Groovy 对象,具有名为 message 的字段。扩展对象将添加到插件列表中,名称为greeting。然后,该对象可用作与扩展对象同名的项目属性。
Gradle 为每个扩展对象添加了一个配置闭包,因此您可以将设置分组在一起。看看下面的代码。在build.gradle文件中使用此代码。
apply plugin: GreetingPlugin greeting { message = 'Hi' greeter = 'Gradle' } class GreetingPlugin implements Plugin<Project> { void apply(Project project) { project.extensions.create("greeting", GreetingPluginExtension) project.task('hello') << { println "${project.greeting.message} from ${project.greeting.greeter}" } } } class GreetingPluginExtension { String message String greeter }
使用以下代码来执行上述脚本。
C:\> gradle -q hello
输出
输出如下 -
Hello from Gradle
标准 Gradle 插件
Gradle 发行版中包含不同的插件。
语言插件
这些插件添加了对可以在 JVM 中编译和执行的各种语言的支持。
插件 ID | 自动应用 | 描述 |
---|---|---|
爪哇 | java基础 | 向项目添加 Java 编译、测试和捆绑功能。它是许多其他 Gradle 插件的基础。 |
时髦的 | java,groovy 基础 | 添加对构建 Groovy 项目的支持。 |
斯卡拉 | java,scala-base | 添加了对构建 Scala 项目的支持。 |
蚂蚁金服 | 爪哇 | 添加对使用 Antlr 生成解析器的支持。 |
孵化语言插件
这些插件添加了对各种语言的支持。
插件 ID | 自动应用 | 描述 |
---|---|---|
汇编器 | - | 向项目添加本机汇编语言功能。 |
C | - | 向项目添加 C 源代码编译功能。 |
程序文件 | - | 向项目添加 C++ 源编译功能。 |
目标-c | - | 向项目添加 Objective-C 源代码编译功能。 |
目标cpp | - | 向项目添加 Objective-C++ 源编译功能。 |
Windows 资源 | - | 添加了对在本机二进制文件中包含 Windows 资源的支持。 |