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/tw511.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/tw511.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/tw511.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資源的支援。