📅  最后修改于: 2020-10-16 02:42:30             🧑  作者: Mango
插件不过是一组任务,几乎所有有用的任务(如编译任务,设置域对象,设置源文件等)都由插件处理。将插件应用于项目意味着允许插件扩展项目的功能。插件可以执行以下操作:
Gradle中有两种类型的插件,脚本插件和二进制插件。脚本插件是附加的构建脚本,它提供了一种声明性方法来处理构建。通常在构建中使用。二进制插件是实现插件接口并采用编程方法来操纵构建的类。二进制插件可以驻留在构建脚本中,在项目层次结构中,也可以驻留在插件JAR的外部。
Project.apply() API方法用于应用特定的插件。您可以多次使用同一个插件。插件有两种类型,一种是脚本插件,另一种是二进制插件。
可以从本地文件系统或远程位置上的脚本中应用脚本插件。文件系统位置相对于项目目录,而远程脚本位置指定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 {
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 {
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 {
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发行版中包含不同的插件。
这些插件增加了对可以在JVM中编译和执行的各种语言的支持。
Plugin Id | Automatically Applies | Description |
---|---|---|
java | java-base | Adds Java compilation, testing, and bundling capabilities to a project. It serves as the basis for many of the other Gradle plugins. |
groovy | java,groovy-base | Adds support for building Groovy projects. |
scala | java,scala-base | Adds support for building Scala projects. |
antlr | Java | Adds support for generating parsers using Antlr. |
这些插件增加了对各种语言的支持。
Plugin Id | Automatically Applies | Description |
---|---|---|
assembler | – | Adds native assembly language capabilities to a project. |
c | – | Adds C source compilation capabilities to a project. |
cpp | – | Adds C++ source compilation capabilities to a project. |
objective-c | – | Adds Objective-C source compilation capabilities to a project. |
objective-cpp | – | Adds Objective-C++ source compilation capabilities to a project. |
windows-resources | – | Adds support for including Windows resources in native binaries. |