
Gradle - 外掛
外掛只不過是一組所有有用的任務,例如編譯任務、設定域物件、設定原始檔等都由外掛處理。將外掛應用於專案意味著它允許外掛擴充套件專案的 capabilities。
外掛可以做以下事情:
擴充套件基本的 Gradle 模型(例如,新增可以配置的新 DSL 元素)。
根據轉換配置專案(例如,新增新任務或配置合理的預設值)。
應用特定配置(例如,新增組織儲存庫或強制執行標準)。
外掛型別
Gradle 中有兩種型別的外掛,如下所示:
指令碼外掛 - 指令碼外掛是一個額外的構建指令碼,它提供了一種宣告式的方法來操作構建。這通常在構建中使用。
二進位制外掛 - 二進位制外掛是實現外掛介面並採用程式設計方式操作構建的類。二進位制外掛可以與構建指令碼一起存在,與專案層次結構一起存在,或者外部存在於外掛 JAR 中。
應用外掛
Project.apply() API 方法用於應用特定的外掛。您可以多次使用相同的外掛。外掛有兩種型別,一種是指令碼外掛,另一種是二進位制外掛。
指令碼外掛
指令碼外掛可以從本地檔案系統上的指令碼或遠端位置應用。檔案系統位置相對於專案目錄,而遠端指令碼位置指定 HTTP URL。
請檢視以下程式碼片段。它用於將other.gradle外掛應用於構建指令碼。在build.gradle檔案中使用此程式碼。
apply from: 'other.gradle'
二進位制外掛
每個外掛都由外掛 ID 標識。一些核心外掛使用短名稱來應用外掛 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() 方法呼叫外掛例項。
以下示例包含一個問候外掛,它向專案添加了一個 hello 任務。請檢視以下程式碼並在build.gradlebuild.gradle 檔案中使用此程式碼。
apply plugin: GreetingPlugin class GreetingPlugin implements Plugin<Project> { 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<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') << { println project.greeting.message } } } class GreetingPluginExtension { def String message = 'Hello from GreetingPlugin' }
使用以下程式碼執行上述指令碼:
C:\> gradle -q hello
輸出
執行程式碼時,您將看到以下輸出:
Hi from Gradle
在此示例中,GreetingPlugin 是一個簡單的舊 Groovy 物件,帶有一個名為 message 的欄位。擴充套件物件使用名稱 greeting 新增到外掛列表中。然後,此物件作為具有與擴充套件物件相同名稱的專案屬性可用。
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 }
使用以下程式碼執行上述指令碼。
C:\> gradle -q hello
輸出
輸出如下所示:
Hello 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 資源的支援。 |