日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用 Java 開發 Gradle 插件的步驟

瀏覽:29日期:2022-08-15 17:52:51

Gradle 插件代碼可以在 build.gradle 中,buildSrc 項目中,以及獨立的插件項目中編寫。本文將介紹如何在一個獨立的項目中使用 Java 語言編寫 Gradle 插件,并發布到倉庫中。

1 創建項目

Gradle 插件項目和普通的 Java 項目沒有什么不同,普通項目是基于其它三方包進行開發,而 Gradle 插件項目基于 Gradle 的 API 進行開發。

基于 Gradle 創建一個 Java 項目,項目目錄結構如下,和普通項目一樣。

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

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 (可以認為是 build.gralde, 它本質是一個實現了 Project 接口的類)所引用。開發插件的本質就是往 build.gradle 中插入一段邏輯。

void apply​(T target)

Plugin 是一個泛型接口,有一個抽象方法 apply,它的參數類型可以是 Project, Settings, 或者 Gradle。

類型為 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

import org.gradle.api.Plugin;import org.gradle.api.Project;public class HelloPlugin implements Plugin<Project> { @Override public void apply(Project project) { System.out.println('Message from hello plugin.'); }}

GoodbyePlugin.java

import org.gradle.api.Plugin;import org.gradle.api.Project;public class GoodbyePlugin implements Plugin<Project> { @Override public void apply(Project project) { System.out.println('Message from goodbye plugin.'); }}

2)在 build.gradle 中添加描述內容

描述內容需要指定插件的 ID 和插件的入口類。

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 插件

plugins { id ’java-gradle-plugin’ id ’maven-publish’}

2)執行 gradle publishToMavenLocal,成功之后可以在 ~/.m2 目錄下找打發布的 jar 包。

要使用發布到 Maven 倉庫中的 Gradle 插件,需要先在 settings.gradle 中指定倉庫。如下代碼指定了插件倉庫有本地 Maven 和 Gradle 插件門戶。

pluginManagement { repositories { mavenLocal() gradlePluginPortal() }}3.2 發布到 Gradle 官方插件門戶

我們平常使用的大部分插件來自于 Gradle 官方插件門戶,開發人員注冊一個 Gradle 賬號之后可以將插件發布到門戶,這樣其他人就可以很方便地使用了。按照如下步驟發布插件,這里如果沒有描述清楚可以移步 Gradle 官網文檔:How do I add my plugin to the plugin portal?。

1)注冊門戶賬戶

2)創建 API Key。注冊好賬戶就能夠看見了。

3)將 API Key 添加到文件 ~/.gradle/gradle.properties

4)使用插件發布插件 com.gradle.plugin-publish 發布插件(不是病句,只是有點繞 😔)

將 com.gradle.plugin-publish 添加到插件項目 gradle-plugin-sample 的 build.gradle 中,然后添加插件的描述信息。

pluginBundle { website = ’http://www.gradle.org/’ vcsUrl = ’https://github.com/gradle/gradle’ description = ’Greetings from here!’ tags = [’greetings’, ’salutations’] plugins { greetingsPlugin { // id=’com.robothy.hello’ 可以省略,因為在 gradlePlugin 配置塊中已經有 id 信息了 displayName = ’Hello Plugin’ } }}

5)使用 gradle publishPlugins 發布插件

如果插件信息描述正確,執行 puhlishPlugins 任務之后會打印出待審核的信息,之后就是等待了(本人發布的插件 com.robothy.cn-repo 經過了四五個小時就審核通過了)。

Publishing plugin com.robothy.cn-repo version 1.0Thank you. Your new plugin com.robothy.cn-repo has been submitted for approval by Gradle engineers. The request should be processed within the next few days, at which point you will be contacted via email.4 更多4.1 在插件中添加任務

先自定義一個 Gradle 任務類 SayHelloTask,該任務的行為是簡答的打印固定的字符串。自定義任務需要繼承 DefaultTask。

public class SayHelloTask { @TaskAction public void hello() { System.out.println('Hello, World!'); }}

然后通過 project 往項目中注冊一個 SayHelloTask 的實例,任務名為 task。

public class HelloPlugin implements Plugin<Project> { @Override public void apply(Project project) { System.out.println('Message from hello plugin.'); project.getTasks().register('hello', SayHelloTask.class); }}

當然,也可以在使用 HelloPlugin 插件的 build.gradle 中注冊任務。

task hello(type: com.robothy.SayHelloTask)

重新發布插件,執行下面命令時控制臺會打印出 'Hello, World!'。

gradle hello4.2 添加擴展

Gradle 插件可以往 project 中注冊擴展,開發人員可以通過擴展設置一些參數值,以供其它的 Gradle Task 使用。假設我們希望在 build.gradle 中添加如下配置信息。

user { name = ’Robothy’ country = ’China’}

首先,創建一個配置信息接口,接口中只包含 getter 抽象方法。需要注意的是,返回的類型為 Property,并非直接返回 String。配置信息不需要創建為 Java 類,Gradle 在運行時會通過動態代理的方式自動往代理對象中注入值。

public interface User { Property<String> getName(); Property<String> getCountry();}

然后插件就可以往 project 中添加一個擴展了。

project.getExtensions().add('user', User.class);

重新發布插件,此時引入了插件的項目就可以在 builde.gradle 中添加本小節開頭描述的配置塊了。

Gradle 任務可以通過如下方式訪問到這些配置信息。

User user = (User) (project.getExtensions().getByName('user'));5 小結

本文主要介紹了如何使用純 Java 語言在一個獨立的項目中編寫 Gradle 插件,插件主要通過通過傳入的 project 參數訪問項目,往項目的構建生命周期中插入一些邏輯或者添加配置信息。插件可以發布到私有的 Maven 倉庫,也可以發布到 Gradle 插件門戶。插件項目中還可以很好地封裝一些 Gradle Task,定義一些配置類型。

6 參考內容

[1] Build Script Basics

[2] How do I add my plugin to the plugin portal?

[3] Developing Custom Gradle Plugins

以上就是使用 Java 開發 Gradle 插件的步驟的詳細內容,更多關于Java 開發 Gradle 插件的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲va中文在线播放免费| 国产剧情在线观看一区| 美女久久网站| 999国产精品永久免费视频app| 福利视频一区| 亚洲天堂免费| 蜜臀国产一区| 国产在线欧美| 婷婷综合六月| 最新日韩av| 尤物在线精品| 婷婷精品在线| 日本精品影院| 亚洲精品**中文毛片| 97精品视频在线看| 成人亚洲一区二区| 亚洲午夜天堂| 99精品一区| 夜夜精品视频| 亚洲另类av| 国产欧美日韩影院| 麻豆精品少妇| 麻豆网站免费在线观看| 秋霞影院一区二区三区| 亚洲精品1区| 亚洲一区日本| 亚洲三级精品| 国产精品综合| 国产一区二区三区国产精品| 欧产日产国产精品视频| 精品欧美久久| 亚洲我射av| 国产欧美日韩精品一区二区免费 | 激情综合五月| 色爱综合av| 久久一区二区三区喷水| 丝袜脚交一区二区| 国产伦理一区| 视频在线观看一区二区三区| 日韩精品久久久久久| 成人三级高清视频在线看| 先锋亚洲精品| 国产欧美成人| 免费中文字幕日韩欧美| 亚洲91视频| 欧美日韩a区| 91久久精品无嫩草影院| 美女视频一区在线观看| 电影天堂国产精品| 午夜在线视频观看日韩17c| 一本一道久久a久久精品蜜桃| 黑丝一区二区三区| 国产日韩一区二区三区在线播放 | 国产精品一区高清| 免费在线小视频| 亚洲图片久久| 国内一区二区三区| 亚洲激情不卡| 麻豆精品久久| 久久av在线| 国产在线视频欧美一区| 国产精品嫩草99av在线| 日韩高清一区二区| 香蕉成人av| 欧美日本久久| 欧美在线网站| 国产一区2区| 免费在线观看日韩欧美| 精品美女久久| 亚洲一区二区三区四区电影| 国产中文字幕一区二区三区| 伊人国产精品| 久久亚洲精品中文字幕蜜潮电影| 国产精品一线天粉嫩av| 久久亚洲二区| 欧美精品高清| 国产精品久久乐| 国产亚洲精品v| 精品一区二区三区免费看 | 国产探花一区| 宅男噜噜噜66国产日韩在线观看| 国产精品手机在线播放| 伊人久久婷婷| а√天堂8资源中文在线| 亚洲最大av| 亚洲韩日在线| 国产成人77亚洲精品www| 日本综合精品一区| 国产一区二区三区自拍| 欧美精品成人| 婷婷亚洲成人| 欧美日韩高清| 91亚洲国产| 国产日韩视频在线| 中文一区一区三区免费在线观| 欧美日韩国产观看视频| 欧美亚洲三级| 亚洲精品无播放器在线播放| 极品日韩av| 黑森林国产精品av| 久久不见久久见免费视频7 | 精品一区欧美| 精品国产aⅴ| 国产欧美日韩一级| 午夜天堂精品久久久久| 久久亚洲一区| 中日韩男男gay无套| 欧美不卡高清| 精品中文字幕一区二区三区四区| 欧美日韩一视频区二区| 亚洲精品护士| 日韩专区欧美专区| 亚洲欧美日韩国产一区| 亚洲女同一区| 久久亚洲国产| 亚洲va中文在线播放免费| 久久精品免费看| 国产精品毛片aⅴ一区二区三区| 日韩精品中文字幕一区二区| 亚洲毛片一区| 日韩在线观看中文字幕| 亚洲开心激情| 综合色就爱涩涩涩综合婷婷| 香蕉久久国产| 麻豆亚洲精品| 亚洲最新av| 日韩在线电影| 日韩精品久久理论片| 日本伊人久久| 五月精品视频| 欧美中文一区二区| 日韩欧美中文字幕一区二区三区| 欧美精品1区| 影音先锋久久| 亚洲一区二区毛片| 在线午夜精品| 麻豆精品网站| 免费视频最近日韩| 四虎精品永久免费| 日韩高清欧美激情| 久久精品凹凸全集| 国产精品久一| 精品久久国产一区| 欧美国产小视频| 在线观看精品| 亚洲国内精品| 日韩午夜免费| 精品一区三区| 亚洲自拍另类| 亚洲丝袜美腿一区| 视频一区日韩精品| 精精国产xxxx视频在线野外 | 国产视频网站一区二区三区| 午夜在线播放视频欧美| 99精品视频在线观看免费播放| 99视频精品全国免费| 亚洲精品电影| 无码日韩精品一区二区免费| 国产麻豆一区二区三区精品视频| 久久精品国产免费| 国产suv精品一区二区四区视频| 日韩免费高清| 亚洲综合二区| 欧美日本不卡| 日本免费一区二区三区四区| 成人av二区| 日韩高清欧美激情| 久久精品国产99国产| 色偷偷色偷偷色偷偷在线视频| 国产99精品| 一本综合精品| 久久精品国产精品亚洲毛片| 日本精品不卡| 亚久久调教视频| 久草免费在线视频| 夜夜精品视频| 国产精选久久| 91精品综合| 日本亚洲欧洲无免费码在线| 精品视频97| 亚洲女人av| 美女精品视频在线| 久久精品不卡| 69堂精品视频在线播放| 桃色一区二区| 色综合视频一区二区三区日韩| 国产 日韩 欧美 综合 一区| 悠悠资源网久久精品| 国产日韩一区二区三区在线| 日韩精品免费一区二区在线观看| 亚洲欧美日韩综合国产aⅴ| 国产精品调教视频| 欧美女激情福利| 国产精品115| 日韩久久精品| 国产精品777777在线播放| 免费精品视频| 爽爽淫人综合网网站| 综合色就爱涩涩涩综合婷婷| 亚洲色图综合|