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

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

使用 Java 開發 Gradle 插件的步驟

瀏覽:30日期: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久久,三上悠亚国产精品一区二区三区
久久99伊人| 欧美日韩一区二区国产| 日韩av三区| 麻豆久久一区| 欧美精品导航| 久久亚州av| 国产欧美一区二区三区米奇| 97成人在线| 国产精品久久久久久久久久妞妞 | 久久激五月天综合精品| 清纯唯美亚洲综合一区| 国产精品一区二区中文字幕| 国产高清视频一区二区| 国产成人精品一区二区三区视频| zzzwww在线看片免费| 日韩国产一区二区| 久久亚洲国产| 视频一区二区三区中文字幕| 亚洲97av| 国产麻豆精品| 精品亚洲精品| 久久激情一区| 蘑菇福利视频一区播放| 日产欧产美韩系列久久99| 国产精品亚洲一区二区在线观看| 免费一区二区三区在线视频| 麻豆精品在线播放| 日韩视频不卡| 精品入口麻豆88视频| 婷婷成人综合| 欧美a一区二区| 日韩在线麻豆| 欧美日韩在线二区| 精品久久在线| 天海翼亚洲一区二区三区| 久久夜夜操妹子| 日韩午夜免费| 日韩av二区在线播放| 精品一区电影| 婷婷综合五月| 欧美日韩亚洲一区二区三区在线| 国产在线观看91一区二区三区| 日韩一区二区三区免费| 久久性天堂网| 精品视频网站| 一本色道精品久久一区二区三区| 欧美日韩在线精品一区二区三区激情综合| 老司机精品视频在线播放| 婷婷激情久久| 国产日韩视频| 日韩精品91| 亚洲三区欧美一区国产二区| 精品少妇av| 久久成人国产| 精品三级在线观看视频| 免费日韩一区二区| 国产suv精品一区二区四区视频| 欧美午夜不卡| 精品一区二区三区视频在线播放| 亚洲免费成人| 国产91在线精品| 亚洲精品看片| 日本欧美不卡| 国产探花在线精品| 午夜久久av| 国产精品分类| 欧美综合社区国产| 亚洲狼人精品一区二区三区| 亚洲色图综合| 97精品久久| 中文字幕在线高清| 国内不卡的一区二区三区中文字幕| 国产一区二区三区四区| 日韩久久99| 91综合网人人| 亚洲欧洲国产精品一区| 日韩精品首页| 国产精品一区二区av交换| 波多野结衣一区| 欧美激情久久久久久久久久久| 99久久亚洲精品| 久久久久免费| 久久激情av| 在线一区视频| 蜜臀国产一区| 国产精品一在线观看| 黑丝一区二区| 精品视频在线你懂得| 婷婷久久免费视频| 久久国产电影| 国产91欧美| 欧美久久亚洲| 视频精品一区二区| 国内精品福利| 都市激情国产精品| 97久久亚洲| 亚洲免费婷婷| 久久亚洲精品中文字幕蜜潮电影| 国产精品99久久免费| 最新国产精品视频| 悠悠资源网久久精品| 久久国产麻豆精品| 亚洲精品人人| 国产精品入口久久| 日本久久成人网| 91精品麻豆| 亚洲精品小说| 日韩在线看片| 精品国产美女a久久9999| 日韩大片在线| 欧美日韩一区二区综合| 国产一区二区三区视频在线| 日本色综合中文字幕| 亚洲永久字幕| 成人免费网站www网站高清| 九九久久国产| 国产精品一站二站| 欧美另类中文字幕| 91嫩草精品| 一区二区高清| 久久国产99| 国产视频一区在线观看一区免费| 色爱综合av| 欧美日韩国产观看视频| 国产成人免费精品| 久久精品国产一区二区| 国产精品久久久久9999高清| 亚洲精品无播放器在线播放| 亚洲另类视频| 日韩精品久久久久久久软件91| 免费成人在线观看| 蜜桃久久av一区| 中文字幕日韩亚洲| 亚洲精品美女| 日韩av在线播放中文字幕| 日韩成人av影视| 97成人在线| 麻豆成人91精品二区三区| 久久99影视| 日本黄色精品| 国产一区二区三区免费在线| 久久香蕉网站| 亚洲黄色免费看| 蜜桃一区二区三区| 一区二区精彩视频| 国产极品模特精品一二| 捆绑调教日本一区二区三区| 日韩视频网站在线观看| 日韩精品免费一区二区在线观看| 欧美精品黄色| 免费国产自线拍一欧美视频| 亚洲乱码视频| 欧美另类中文字幕 | 夜鲁夜鲁夜鲁视频在线播放| 欧美羞羞视频| 图片区亚洲欧美小说区| 欧美日韩日本国产亚洲在线 | 久久福利精品| 日韩精品一区二区三区中文在线| 欧美在线黄色| 国产成人久久| 999国产精品视频| 亚洲欧美日韩视频二区| 四虎在线精品| 精品三区视频| 免费av一区二区三区四区| 亚洲午夜国产成人| 欧美日韩1区2区3区| 久久伊人亚洲| 久久久五月天| 日本免费一区二区视频| 久久精品女人| 性欧美69xoxoxoxo| 日韩精品一区二区三区中文字幕| 精品一区二区三区亚洲| 久久久影院免费| 日韩精品乱码av一区二区| 精品视频一区二区三区四区五区| 久久久久午夜电影| 日本成人中文字幕| 中文字幕色婷婷在线视频| 国产精品日韩欧美一区| 一区二区亚洲视频| 久久国产直播| 在线手机中文字幕| 久久激五月天综合精品| 国产精品草草| 色狠狠一区二区三区| 欧美精品自拍| 国产综合欧美| 久久激情一区| 国产一区日韩一区| 美女网站一区| 激情综合自拍| 日本久久黄色| 亚洲精品乱码日韩| www在线观看黄色| 伊人久久成人| 国产精品亚洲四区在线观看| 91精品啪在线观看国产18|