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
}
使用以下代碼執行上述腳本,得到結果如下 -
D:/worksp/yiibai.com/gradle-3.1/study/script>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資源的支持。