Gradle 教程

Gradle 笔记

Gradle 插件


Gradle 插件只是一组任务,几乎所有的任务,如编译任务,设置域对象,设置源文件等都由插件处理。

插件类型

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.yiibai.bintray" version "0.1.0"
}

编写自定义插件

在创建自定义插件时,您需要编写一个插件的实现。Gradle 实例化插件并使用 Plugin.apply() 方法调用插件实例。以下示例包含一个简单的hello插件,它将一个问候任务添加到项目中。看看下面的代码。在 build.gradle 文件中使用此代码。

apply plugin: HelloPlugin

class HelloPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.task('hello') << {
         println "Hello from the HelloPlugin."
      }
   }
}

使用以下代码执行上述脚本。

D:/worksp/yiibai.com/gradle-3.1/study/script> gradle -q hello
Hello from the HelloPlugin

从构建获取输入

大多数插件需要从构建脚本中的配置获得支持。Gradle项目有一个关联“ExtensionContainer”对象,它有助于跟踪传递给插件的所有设置和属性。

让我们在项目中添加一个简单的扩展对象。在这里,我们向项目中添加一个问候语扩展对象,它允许我们配置问候语。在build.gradle文件中使用此代码如下所示。

apply plugin: HelloPlugin

greeting.message = 'Hi,this from configure Gradle message.'

class HelloPlugin implements Plugin<Project> {
   void apply(Project project) {
      // Add the 'greeting' extension object
      project.extensions.create("greeting", HelloPluginExtension)

      // Add a task that uses the configuration
      project.task('hello') << {
         println project.greeting.message
      }
   }
}

class HelloPluginExtension {
   def String message = 'Hello,this from HelloPluginExtension message.'
}

使用以下代码执行上述脚本,得到结果如下 -

D:/worksp/yiibai.com/gradle-3.1/study/script>gradle -q hello
Hi,this from configure Gradle 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
}

Gradle 常用插件

Gradle分布中包含不同的插件。

语言插件

这些插件的添加,让 JVM 在编译和执行时对各种语言支持。

插件 Id 自动应用 描述
java java-base 向项目添加 Java 编译,测试和绑定的功能。它作为许多其他 Gradle 插件的基础。
groovy java,groovy-base 添加对构建 Groovy 项目的支持。
scala java,scala-base 添加对构建 Scala 项目的支持。
antlr Java 添加了使用 Antlr 生成解析器的支持。

孵化语言插件

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

插件 Id 自动应用 描述
汇编 向项目添加本地汇编语言功能。
c 向项目添加 C 语言的源代码编译功能。
cpp 向项目添加 C++语言的源代码编译功能。
objective-c 向项目添加 objective-c 语言的源代码编译功能。
objective-cpp 向项目添加 Objective-C++语言的源代码编译功能。
windows-resources 添加本机二进制文件包括 Windows 资源的支持。

常用插件

插件 id 描述
io.spring.dependency-management 提供了 Spring 项目组合中的版本依赖,这些依赖关系是经过测试的,可以保证正常工作。