电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

使用 Java 開發 Gradle 插件的步驟

瀏覽:11日期: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
相關文章:
主站蜘蛛池模板: 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 伺服电机_直流伺服_交流伺服_DD马达_拓达官方网站 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 振动传感器,检波器-威海广达勘探仪器有限公司 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 双效节能浓缩器-热回流提取浓缩机组-温州市利宏机械 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 合肥地磅_合肥数控切割机_安徽地磅厂家_合肥世佳电工设备有限公司 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 |