插件只是一组任务,几乎所有的任务,如编译任务,设置域对象,设置源文件等都由插件处理。
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.zyiz.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/zyiz.net/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/zyiz.net/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 }
使用以下代码执行上述脚本,得到结果如下 -
D:/worksp/zyiz.net/gradle-3.1/study/script>gradle -q hello Hi from 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资源的支持。 |