Gradle插件


插件只不过是一组任务,几乎所有有用的任务,例如编译任务,设置域对象,设置源文件等都由插件处理。将插件应用到项目中,允许插件扩展项目的功能。插件可以 -

  • 扩展基本的Gradle模型(例如添加可配置的新DSL元素)。
  • 根据转换配置项目(例如添加新任务或配置合理的默认值)。
  • 应用特定的配置(例如添加组织存储库或执行标准)。

插件的类型

Gradle中有两种类型的插件,脚本插件和二进制插件。脚本插件是一个额外的构建脚本,它提供了一种声明式的方法来操纵构建。这通常在构建中使用。二进制插件是实现插件接口并采用编程方法来操作构建的类。二进制插件可以与构建脚本一起存在,具有项目层次或外部插件JAR中。

应用插件

Project.apply() API方法用于应用特定的插件。 您可以多次使用相同的插件。有两种类型的插件,一种是脚本插件,另一种是二进制插件。

脚本插件

脚本插件可以从本地文件系统的脚本或远程位置应用。文件系统位置与项目目录相关,而远程脚本位置指定HTTP URL。看看下面的代码片段。它用于将 other.gradle 插件应用于构建脚本。在 build.gradle 文件中使用此代码。

apply from: 'other.gradle'

二进制插件

每个插件都由插件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 文件中使用此代码。

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'的字段。扩展对象被添加到名称问候的插件列表中。此对象随后变为可用作与扩展对象具有相同名称的项目属性。

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的碱基 将Java编译,测试和捆绑功能添加到项目中。它是许多其他Gradle插件的基础。
常规 的java,常规基 添加对构建Groovy项目的支持。
斯卡拉 java中,阶基 添加对构建Scala项目的支持。
ANTLR Java的 添加使用Antlr生成解析器的支持。

孵化语言插件

这些插件添加了对各种语言的支持。

插件ID 自动应用 描述
汇编 \- 将本机汇编语言功能添加到项目中。
C \- 将C源编译功能添加到项目中。
CPP \- 将C ++源代码编译功能添加到项目中。
Objective-C的 \- 将Objective-C源代码编译功能添加到项目中。
客观-CPP \- 将Objective-C ++源代码编译功能添加到项目中。
Windows的资源 \- 添加对本地二进制文件中包含Windows资源的支持。