Gradle 插件

  • 插件

    插件不过是一组任务,几乎所有有用的任务(如编译任务,设置域对象,设置源文件等)都由插件处理。将插件应用于项目意味着允许插件扩展项目的功能。插件可以执行以下操作:
    • 扩展基本的Gradle模型(例如,添加可以配置的新DSL元素)。
    • 根据转换配置项目(例如,添加新任务或配置合理的默认值)。
    • 应用特定的配置(例如,添加组织存储库或强制执行标准)。
  • 插件类型

    Gradle中有两种类型的插件,脚本插件和二进制插件。脚本插件是附加的构建脚本,它提供了声明性的方法来处理构建。通常在构建中使用。二进制插件是实现插件接口并采用编程方法来操纵构建的类。二进制插件可以与构建脚本一起使用,也可以与项目层次结构一起使用,也可以在插件JAR中外部使用。
  • 应用插件

    API方法 Project.apply() 用于应用特定的插件。您可以多次使用同一个插件。插件有两种类型,一种是脚本插件,另一种是二进制插件。
    脚本插件
    可以从本地文件系统或远程位置上的脚本中应用脚本插件。文件系统位置相对于项目目录,而远程脚本位置指定HTTP URL。看一下下面的代码片段。它用于将other.gradle插件应用于构建脚本。在build.gradle文件中使用此代码。
    
    apply from: 'other.gradle'
    
    二进制插件
    在某些核心插件使用短名称来应用它们,而某些社区插件使用完全限定名称作为插件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()方法调用插件实例。下面的示例包含一个Greeting插件,该插件向项目添加了hello任务。看一下下面的代码。在build.gradle文件中使用此代码。
    
    apply plugin: GreetingPlugin
    
    class GreetingPlugin implements Plugin<Project> {
       void apply(Project project) {
          project.task('hello') {
             doLast{
                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')  {
             doLast{
                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') {
             doLast{
                println "${project.greeting.message} from ${project.greeting.greeter}"
             }
          }
       }
    }
    
    class GreetingPluginExtension {
       String message
       String greeter
    }
    
    使用以下代码执行上述脚本。
    
    C:\> gradle -q hello
    
    输出:
    
    Hi from Gradle
    
  • 标准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资源包括在本机二进制文件中的支持。