最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年03月03日 10:11:00   作者:https://www.cnblogs.com/robothy/p/14335174.html  
這篇文章主要介紹了使用 Java 開(kāi)發(fā) Gradle 插件的步驟,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下

Gradle 插件代碼可以在 build.gradle 中,buildSrc 項(xiàng)目中,以及獨(dú)立的插件項(xiàng)目中編寫。本文將介紹如何在一個(gè)獨(dú)立的項(xiàng)目中使用 Java 語(yǔ)言編寫 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 接口的類,它被 Project (可以認(rèn)為是 build.gralde, 它本質(zhì)是一個(gè)實(shí)現(xiàn)了 Project 接口的類)所引用。開(kāi)發(fā)插件的本質(zhì)就是往 build.gradle 中插入一段邏輯。

void apply​(T target)

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

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

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

一個(gè)獨(dú)立的項(xiàng)目中可以有多個(gè)實(shí)現(xiàn)了 Plugin 接口的類,意味著一個(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)建插件類

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 和插件的入口類。

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 官方插件門戶。

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 插件門戶。

pluginManagement {
 repositories {
  mavenLocal()
  gradlePluginPortal()
 }
}

3.2 發(fā)布到 Gradle 官方插件門戶

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

1)注冊(cè)門戶賬戶

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.0
Thank 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ù)類 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 hello

4.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 抽象方法。需要注意的是,返回的類型為 Property,并非直接返回 String。配置信息不需要?jiǎng)?chuàng)建為 Java 類,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)目中編寫 Gradle 插件,插件主要通過(guò)通過(guò)傳入的 project 參數(shù)訪問(wèn)項(xiàng)目,往項(xiàng)目的構(gòu)建生命周期中插入一些邏輯或者添加配置信息。插件可以發(fā)布到私有的 Maven 倉(cāng)庫(kù),也可以發(fā)布到 Gradle 插件門戶。插件項(xiàng)目中還可以很好地封裝一些 Gradle Task,定義一些配置類型。

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)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Jexcel實(shí)現(xiàn)按一定規(guī)則分割excel文件的方法

    Jexcel實(shí)現(xiàn)按一定規(guī)則分割excel文件的方法

    這篇文章主要介紹了Jexcel實(shí)現(xiàn)按一定規(guī)則分割excel文件的方法,涉及java操作Excel文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Java?Collection?接口和常用方法綜合詳解

    Java?Collection?接口和常用方法綜合詳解

    Collection派生出三個(gè)子接口,Set代表不可重復(fù)的無(wú)序集合、List代表可重復(fù)的有序集合、Queue是java提供的隊(duì)列實(shí)現(xiàn),通過(guò)它們不斷的擴(kuò)展出很多的集合類,接下來(lái)我們?cè)敿?xì)介紹一下
    2021-11-11
  • SpringBoot中調(diào)用通用URL的實(shí)現(xiàn)

    SpringBoot中調(diào)用通用URL的實(shí)現(xiàn)

    在 Spring Boot 應(yīng)用程序中,有時(shí)候我們需要調(diào)用一些通用的 URL 接口,本文主要介紹了SpringBoot中調(diào)用通用URL的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 談Java static關(guān)鍵字的用法與好處

    談Java static關(guān)鍵字的用法與好處

    這篇文章主要為大家詳細(xì)介紹了Java static關(guān)鍵字的用法與好處,感興趣的朋友可以參考一下
    2016-05-05
  • 一段眼睛跟著鼠標(biāo)轉(zhuǎn)動(dòng)的跟蹤眼代碼

    一段眼睛跟著鼠標(biāo)轉(zhuǎn)動(dòng)的跟蹤眼代碼

    java實(shí)現(xiàn)的眼睛跟著鼠標(biāo)轉(zhuǎn)動(dòng)的跟蹤眼代碼
    2008-10-10
  • java構(gòu)造方法的互相調(diào)用方式

    java構(gòu)造方法的互相調(diào)用方式

    這篇文章主要介紹了java構(gòu)造方法的互相調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 利用Log4j將不同Package的日志輸出到不同文件的方法

    利用Log4j將不同Package的日志輸出到不同文件的方法

    日志是應(yīng)用軟件中不可缺少的部分,Apache的開(kāi)源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件,提供方便的日志記錄。這篇文章主要介紹了利用Log4j將不同Package的日志輸出到不同文件的方法,需要的朋友可以參考借鑒,下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • SpringCloud?Feign超詳細(xì)講解

    SpringCloud?Feign超詳細(xì)講解

    Feign是Netflix公司開(kāi)發(fā)的一個(gè)聲明式的REST調(diào)用客戶端;?Ribbon負(fù)載均衡、?Hystrⅸ服務(wù)熔斷是我們Spring?Cloud中進(jìn)行微服務(wù)開(kāi)發(fā)非常基礎(chǔ)的組件,在使用的過(guò)程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-10-10
  • Java HttpClient技術(shù)詳解

    Java HttpClient技術(shù)詳解

    Http協(xié)議的重要性相信不用我多說(shuō)了,HttpClient相比傳統(tǒng)JDK自帶的URLConnection,增加了易用和靈活性(具體區(qū)別,日后我們?cè)儆懻摚?,它不僅是客戶端發(fā)送Http請(qǐng)求變得容易,而且也方便了開(kāi)發(fā)人員測(cè)試接口(基于Http協(xié)議的),即提高了開(kāi)發(fā)的效率,也方便提高代碼的健壯性
    2021-10-10
  • IDEA中properties與yml文件的轉(zhuǎn)變方式

    IDEA中properties與yml文件的轉(zhuǎn)變方式

    文章介紹了如何在IntelliJ IDEA 2021.1.1中安裝和使用ConvertYAMLandPropertiesFile插件進(jìn)行YAML和Properties文件之間的轉(zhuǎn)換,安裝步驟包括導(dǎo)航到設(shè)置、安裝插件、找到并安裝插件等,插件支持從Properties文件轉(zhuǎn)換為YAML文件,但轉(zhuǎn)換過(guò)程中會(huì)丟失注釋
    2024-12-12

最新評(píng)論

凤冈县| 襄汾县| 邓州市| 苗栗市| 铁力市| 靖宇县| 凤城市| 紫阳县| 台南市| 敦化市| 梓潼县| 邹平县| 海阳市| 顺昌县| 库伦旗| 万山特区| 嘉定区| 田林县| 岳普湖县| 海宁市| 建瓯市| 新巴尔虎右旗| 水城县| 和林格尔县| 金溪县| 周宁县| 泗洪县| 北辰区| 扶余县| 宜川县| 云林县| 奉节县| 鹤山市| 蚌埠市| 康保县| 岐山县| 贵溪市| 务川| 太康县| 磐安县| 南投县|