午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

使用 Java 開(kāi)發(fā) Gradle 插件的步驟

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

Gradle 插件代碼可以在 build.gradle 中,buildSrc 項(xiàng)目中,以及獨(dú)立的插件項(xiàng)目中編寫(xiě)。本文將介紹如何在一個(gè)獨(dú)立的項(xiàng)目中使用 Java 語(yǔ)言編寫(xiě) Gradle 插件,并發(fā)布到倉(cāng)庫(kù)中。

1 創(chuàng)建項(xiàng)目

Gradle 插件項(xiàng)目和普通的 Java 項(xiàng)目沒(méi)有什么不同,普通項(xiàng)目是基于其它三方包進(jìn)行開(kāi)發(fā),而 Gradle 插件項(xiàng)目基于 Gradle 的 API 進(jìn)行開(kāi)發(fā)。

基于 Gradle 創(chuàng)建一個(gè) Java 項(xiàng)目,項(xiàng)目目錄結(jié)構(gòu)如下,和普通項(xiàng)目一樣。

gradle-plugin-sample|├───build.gradle├───settings.gradle└───src ├───main │ ├───java │ └───resources └───test ├───java └───resources

引入 Gradle API 相關(guān)的 jar 包。為了方便起見(jiàn),可以通過(guò) gradle 插件 java-gradle-plugin 來(lái)引入 Java 插件,引入 Gradle API 相關(guān)依賴以及生成插件相關(guān)的描述符。

build.gradle

plugins { id ’java-gradle-plugin’}group ’com.robothy’version ’1.0-SNAPSHOT’repositories { mavenLocal() mavenCentral()}wrapper{ gradleVersion = ’6.7’}2 動(dòng)手開(kāi)發(fā)

項(xiàng)目創(chuàng)建好之后,就可以開(kāi)始動(dòng)手開(kāi)發(fā)了。從項(xiàng)目構(gòu)建角度來(lái)看,Gradle 插件是一段可重用的構(gòu)建邏輯,這段邏輯能夠被應(yīng)用到各個(gè)項(xiàng)目當(dāng)中。更具體來(lái)說(shuō),Gradle 插件是一個(gè)實(shí)現(xiàn)了 org.gradle.api.Plugin 接口的類(lèi),它被 Project (可以認(rèn)為是 build.gralde, 它本質(zhì)是一個(gè)實(shí)現(xiàn)了 Project 接口的類(lèi))所引用。開(kāi)發(fā)插件的本質(zhì)就是往 build.gradle 中插入一段邏輯。

void apply​(T target)

Plugin 是一個(gè)泛型接口,有一個(gè)抽象方法 apply,它的參數(shù)類(lèi)型可以是 Project, Settings, 或者 Gradle。

類(lèi)型為 Project,插件可以應(yīng)用于 build.gradle; 類(lèi)型為 Settings,插件可應(yīng)用于 settings.gradle; 類(lèi)型為 Gradle, 插件可應(yīng)用于 Gradle 初始化腳本。

在應(yīng)用插件時(shí),gradle 會(huì)創(chuàng)建一個(gè)插件類(lèi)的實(shí)例,并調(diào)用 apply 方法。因此,插件的邏輯就是 apply 方法中的代碼。

一個(gè)獨(dú)立的項(xiàng)目中可以有多個(gè)實(shí)現(xiàn)了 Plugin 接口的類(lèi),意味著一個(gè)項(xiàng)目可以包含多個(gè)插件。每一個(gè)插件都需要在 build.gradle 中添加相應(yīng)的描述,java-gradle-plugin 會(huì)根據(jù)這些描述生成插件描述符(jar 包中的一個(gè)文件)。

假設(shè)要在 gradle-plugin-sample 項(xiàng)目中創(chuàng)建兩個(gè)插件 hello, goodbye,需要進(jìn)行如下兩個(gè)步驟:

1)創(chuàng)建插件類(lèi)

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 中添加描述內(nèi)容

描述內(nèi)容需要指定插件的 ID 和插件的入口類(lèi)。

gradlePlugin { plugins { helloPlugin { id = ’com.robothy.hello’ implementationClass = ’com.robothy.HelloPlugin’ } googbyePlugin{ id = ’com.robothy.goodbye’ implementationClass = ’com.robothy.GoodbyePlugin’ } }}

完成上面步驟之后,一個(gè)簡(jiǎn)單的插件就算完成了開(kāi)發(fā),接下來(lái)就可以發(fā)布和使用了。

3 發(fā)布插件

插件可以發(fā)布到 Maven 倉(cāng)庫(kù)和 Gradle 官方插件門(mén)戶。

3.1 發(fā)布到 Maven 倉(cāng)庫(kù)

發(fā)布插件到 Maven 倉(cāng)庫(kù)和發(fā)布普通的 jar 包一樣,需要用到 maven-publish 插件。要發(fā)布到遠(yuǎn)程 Maven 倉(cāng)庫(kù)可能需要提供認(rèn)證信息,這里簡(jiǎn)單起見(jiàn)只發(fā)布到本地倉(cāng)庫(kù)。

1)在 build.gradle 文件中添加 maven-publish 插件

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

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

要使用發(fā)布到 Maven 倉(cāng)庫(kù)中的 Gradle 插件,需要先在 settings.gradle 中指定倉(cāng)庫(kù)。如下代碼指定了插件倉(cāng)庫(kù)有本地 Maven 和 Gradle 插件門(mén)戶。

pluginManagement { repositories { mavenLocal() gradlePluginPortal() }}3.2 發(fā)布到 Gradle 官方插件門(mén)戶

我們平常使用的大部分插件來(lái)自于 Gradle 官方插件門(mén)戶,開(kāi)發(fā)人員注冊(cè)一個(gè) Gradle 賬號(hào)之后可以將插件發(fā)布到門(mén)戶,這樣其他人就可以很方便地使用了。按照如下步驟發(fā)布插件,這里如果沒(méi)有描述清楚可以移步 Gradle 官網(wǎng)文檔:How do I add my plugin to the plugin portal?。

1)注冊(cè)門(mén)戶賬戶

2)創(chuàng)建 API Key。注冊(cè)好賬戶就能夠看見(jiàn)了。

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

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

將 com.gradle.plugin-publish 添加到插件項(xiàng)目 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’ 可以省略,因?yàn)樵?gradlePlugin 配置塊中已經(jīng)有 id 信息了 displayName = ’Hello Plugin’ } }}

5)使用 gradle publishPlugins 發(fā)布插件

如果插件信息描述正確,執(zhí)行 puhlishPlugins 任務(wù)之后會(huì)打印出待審核的信息,之后就是等待了(本人發(fā)布的插件 com.robothy.cn-repo 經(jīng)過(guò)了四五個(gè)小時(shí)就審核通過(guò)了)。

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 在插件中添加任務(wù)

先自定義一個(gè) Gradle 任務(wù)類(lèi) SayHelloTask,該任務(wù)的行為是簡(jiǎn)答的打印固定的字符串。自定義任務(wù)需要繼承 DefaultTask。

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

然后通過(guò) project 往項(xiàng)目中注冊(cè)一個(gè) SayHelloTask 的實(shí)例,任務(wù)名為 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); }}

當(dāng)然,也可以在使用 HelloPlugin 插件的 build.gradle 中注冊(cè)任務(wù)。

task hello(type: com.robothy.SayHelloTask)

重新發(fā)布插件,執(zhí)行下面命令時(shí)控制臺(tái)會(huì)打印出 'Hello, World!'。

gradle hello4.2 添加擴(kuò)展

Gradle 插件可以往 project 中注冊(cè)擴(kuò)展,開(kāi)發(fā)人員可以通過(guò)擴(kuò)展設(shè)置一些參數(shù)值,以供其它的 Gradle Task 使用。假設(shè)我們希望在 build.gradle 中添加如下配置信息。

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

首先,創(chuàng)建一個(gè)配置信息接口,接口中只包含 getter 抽象方法。需要注意的是,返回的類(lèi)型為 Property,并非直接返回 String。配置信息不需要?jiǎng)?chuàng)建為 Java 類(lèi),Gradle 在運(yùn)行時(shí)會(huì)通過(guò)動(dòng)態(tài)代理的方式自動(dòng)往代理對(duì)象中注入值。

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

然后插件就可以往 project 中添加一個(gè)擴(kuò)展了。

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

重新發(fā)布插件,此時(shí)引入了插件的項(xiàng)目就可以在 builde.gradle 中添加本小節(jié)開(kāi)頭描述的配置塊了。

Gradle 任務(wù)可以通過(guò)如下方式訪問(wèn)到這些配置信息。

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

本文主要介紹了如何使用純 Java 語(yǔ)言在一個(gè)獨(dú)立的項(xiàng)目中編寫(xiě) Gradle 插件,插件主要通過(guò)通過(guò)傳入的 project 參數(shù)訪問(wèn)項(xiàng)目,往項(xiàng)目的構(gòu)建生命周期中插入一些邏輯或者添加配置信息。插件可以發(fā)布到私有的 Maven 倉(cāng)庫(kù),也可以發(fā)布到 Gradle 插件門(mén)戶。插件項(xiàng)目中還可以很好地封裝一些 Gradle Task,定義一些配置類(lèi)型。

6 參考內(nèi)容

[1] Build Script Basics

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

[3] Developing Custom Gradle Plugins

以上就是使用 Java 開(kāi)發(fā) Gradle 插件的步驟的詳細(xì)內(nèi)容,更多關(guān)于Java 開(kāi)發(fā) Gradle 插件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 免费在线看黄网站 | 日韩欧美在线观看 | 欧美绿帽合集xxxxx | 蜜桃av噜噜一区二区三区 | 精品久久久久久久久久久久久 | 国产精品九九 | 欧美黄色免费视频 | 91高清网站 | 福利一区视频 | 99自拍视频在线观看 | 五月激情啪啪 | 丝袜一级片 | 97视频免费| 久久九色| 精品九九九 | av中文字幕在线看 | 蜜臀av性久久久久蜜臀av麻豆 | 久操久热 | 亚洲美女色视频 | 天天干免费视频 | www.黄色网址| 亚洲国产伦理 | 色无极亚洲影院 | 国产白浆在线 | 黄色福利社 | 国产精品自拍在线 | 精品国产午夜 | 精品久久久免费 | 免费在线视频一区二区 | 欧美亚洲天堂网 | 国产成人在线免费 | 国产在线a视频 | 在线观看日韩欧美 | 色播综合网 | 国产cao | 国产91在线高潮白浆在线观看 | 超碰人操 | 国产精品一| 亚洲成人精品久久久 | 成人国产免费视频 | 五月天堂网 |