1. 程式人生 > >使用 Java 開發 Gradle 外掛

使用 Java 開發 Gradle 外掛

Gradle 外掛程式碼可以在 build.gradle 中,buildSrc 專案中,以及獨立的外掛專案中編寫。本文將介紹如何在一個獨立的專案中使用 Java 語言編寫 Gradle 外掛,併發布到倉庫中。 ## 1 建立專案 Gradle 外掛專案和普通的 Java 專案沒有什麼不同,普通專案是基於其它三方包進行開發,而 Gradle 外掛專案基於 Gradle 的 API 進行開發。 基於 Gradle 建立一個 Java 專案,專案目錄結構如下,和普通專案一樣。 ```bash gradle-plugin-sample | ├───build.gradle ├───settings.gradle └───src ├───main │ ├───java │ └───resources └───test ├───java └───resources ``` 引入 Gradle API 相關的 jar 包。為了方便起見,可以通過 gradle 外掛 java-gradle-plugin 來引入 Java 外掛,引入 Gradle API 相關依賴以及生成外掛相關的描述符。 build.gradle ```java plugins { id 'java-gradle-plugin' } group 'com.robothy' version '1.0-SNAPSHOT' repositories { mavenLocal() mavenCentral() } wrapper{ gradleVersion = '6.7' } ``` ## 2 動手開發 專案建立好之後,就可以開始動手開發了。從專案構建角度來看,Gradle 外掛是一段可重用的構建邏輯,這段邏輯能夠被應用到各個專案當中。更具體來說,Gradle 外掛是一個實現了 org.gradle.api.Plugin 介面的類,它被 [Project](https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:projects_and_tasks) (可以認為是 build.gralde, 它本質是一個實現了 Project 介面的類)所引用。開發外掛的本質就是往 build.gradle 中插入一段邏輯。 ```java void apply​(T target) ``` Plugin 是一個泛型介面,有一個抽象方法 apply,它的引數型別可以是 [Project](https://docs.gradle.org/current/dsl/org.gradle.api.Project.html), [Settings](https://docs.gradle.org/current/dsl/org.gradle.api.initialization.Settings.html), 或者 [Gradle](https://docs.gradle.org/current/dsl/org.gradle.api.invocation.Gradle.html)。 - 型別為 Project,外掛可以應用於 build.gradle; - 型別為 Settings,外掛可應用於 settings.gradle; - 型別為 Gradle, 外掛可應用於 Gradle 初始化指令碼。 在應用外掛時,gradle 會建立一個外掛類的例項,並呼叫 apply 方法。因此,外掛的邏輯就是 apply 方法中的程式碼。 一個獨立的專案中可以有多個實現了 Plugin 介面的類,意味著一個專案可以包含多個外掛。每一個外掛都需要在 build.gradle 中新增相應的描述,java-gradle-plugin 會根據這些描述生成外掛描述符(jar 包中的一個檔案)。 假設要在 gradle-plugin-sample 專案中建立兩個外掛 hello, goodbye,需要進行如下兩個步驟: 1)建立外掛類 HelloPlugin.java ```java import org.gradle.api.Plugin; import org.gradle.api.Project; public class HelloPlugin implements Plugin { @Override public void apply(Project project) { System.out.println("Message from hello plugin."); } } ``` GoodbyePlugin.java ```java import org.gradle.api.Plugin; import org.gradle.api.Project; public class GoodbyePlugin implements Plugin { @Override public void apply(Project project) { System.out.println("Message from goodbye plugin."); } } ``` 2)在 build.gradle 中新增描述內容 描述內容需要指定外掛的 ID 和外掛的入口類。 ```groovy gradlePlugin { plugins { helloPlugin { id = 'com.robothy.hello' implementationClass = 'com.robothy.HelloPlugin' } googbyePlugin{ id = 'com.robothy.goodbye' implementationClass = 'com.robothy.GoodbyePlugin' } } } ``` 完成上面步驟之後,一個簡單的外掛就算完成了開發,接下來就可以釋出和使用了。 ## 3 釋出外掛 外掛可以釋出到 Maven 倉庫和 Gradle 官方外掛門戶。 ### 3.1 釋出到 Maven 倉庫 釋出外掛到 Maven 倉庫和釋出普通的 jar 包一樣,需要用到 maven-publish 外掛。要釋出到遠端 Maven 倉庫可能需要提供認證資訊,這裡簡單起見只發布到本地倉庫。 1)在 build.gradle 檔案中新增 maven-publish 外掛 ```groovy plugins { id 'java-gradle-plugin' id 'maven-publish' } ``` 2)執行 `gradle publishToMavenLocal`,成功之後可以在 `~/.m2` 目錄下找打發布的 jar 包。 要使用釋出到 Maven 倉庫中的 Gradle 外掛,需要先在 settings.gradle 中指定倉庫。如下程式碼指定了外掛倉庫有本地 Maven 和 Gradle 外掛門戶。 ```groovy pluginManagement { repositories { mavenLocal() gradlePluginPortal() } } ``` ### 3.2 釋出到 Gradle 官方外掛門戶 我們平常使用的大部分外掛來自於 Gradle 官方外掛門戶,開發人員註冊一個 Gradle 賬號之後可以將外掛釋出到門戶,這樣其他人就可以很方便地使用了。按照如下步驟釋出外掛,這裡如果沒有描述清楚可以移步 Gradle 官網文件:[How do I add my plugin to the plugin portal?](https://plugins.gradle.org/docs/submit)。 1)註冊門戶賬戶 2)建立 API Key。註冊好賬戶就能夠看見了。 3)將 API Key 新增到檔案 `~/.gradle/gradle.properties` 4)使用外掛釋出外掛 com.gradle.plugin-publish 釋出外掛(不是病句,只是有點繞