一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Gradle自定義插件介紹2

jf_78858299 ? 來源:小余的自習(xí)室 ? 作者:小余的自習(xí)室 ? 2023-03-30 11:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟4.創(chuàng)建插件實(shí)現(xiàn)的任務(wù):上傳版本信息

class UploadTask extends DefaultTask{
    String url = 'http://127.0.0.1/api/v3/upload/version'
    @TaskAction
    void upload(){
        //1.獲取版本信息
        def version = getCurrentVersion()
        //2.發(fā)送版本信息
        def response = sendAndReceive(version)
        //3.處理響應(yīng):將版本信息以及響應(yīng)寫入到本地文件中
//        checkResponse(response)

    }
    //1.獲取版本信息
    def getCurrentVersion(){
        def name = project.extensions.versionInfo.versionName
        def code = project.extensions.versionInfo.versionCode
        def info = project.extensions.versionInfo.versionUpdateInfo
        println "name:$name code:$code info:$info"
        return new VersionInfo(versionName: name,
                     versionCode: code,
                     versionUpdateInfo: info)
    }
    //2.發(fā)送版本信息
    void sendAndReceive(VersionInfo version){
        OkHttpClient client = new OkHttpClient()
        FormBody body = new FormBody.Builder()
                .add('versionName',version.versionName)
                .add('versionCode',""+version.versionCode)
                .add('versionUpdateInfo',version.versionUpdateInfo)
                .build()
        Request.Builder builder = new Request.Builder()
                .url(url)
                .post(body)

        def call1 = client.newCall(builder.build())
        call1.enqueue(new Callback() {
            @Override
            void onFailure(@NotNull Call call, @NotNull IOException e) {
                println "push version fail:reason:"+e.message
            }

            @Override
            void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                checkResponse(response);
            }
        })
    }
    //3.處理響應(yīng):將版本信息以及響應(yīng)寫入到本地文件中
    void  checkResponse(response){
        println "response:"+new String(response.body().bytes())

    }
}

記住,在需要執(zhí)行的方法上面添加TaskAction注解:在我們?nèi)蝿?wù)執(zhí)行的時(shí)候就會(huì)執(zhí)行到這個(gè)方法。

步驟5.將插件擴(kuò)展和插件任務(wù)集成到Project生命周期中

@Override
void apply(Project project) {
    println "begin:now this is a ${project.name} 's upload plugin"
    //1.在插件中引入extensions中的字段,就是我們Project中配置的擴(kuò)展字段
    project.extensions.create(EXTENSIVE,VersionInfo.class)
    //2.創(chuàng)建待處理的Task
    project.tasks.create(TASK_NAME,UploadTask.class)
    //3.將uploadTask任務(wù)掛架到Project的生命周期中
    def build = project.tasks.getByName('clean')
    def uploadTask = project.tasks.getByName(TASK_NAME)
    //這里使用dependsOn強(qiáng)依賴任務(wù)關(guān)系
    build.dependsOn(uploadTask)
}

步驟6.插件發(fā)布

筆者為了測試,將jar包只發(fā)布在本地,測試使用。

使用如下方式發(fā)布:

gradlePlugin {
    plugins {
        modularPlugin {
                id = 'com.yuhb.upload'
                implementationClass = 'com.yuhb.upload.UploadVersionPlugin'
        }
    }
}

這個(gè)配置在build后自動(dòng)生成resources文件:這個(gè)插件擴(kuò)展配置是引入的:java-gradle-plugin中。

圖片

resources文件自動(dòng)生成.png

當(dāng)然也可以直接在resources文件夾中上手動(dòng)寫入該文件

在插件的build.gradle實(shí)現(xiàn)下面的邏輯:

uploadArchives {
    repositories {
            mavenDeployer {
                    repository(url:uri('D:/maven_local'))
                    pom.groupId = 'com.yuhb.upload'
                    pom.artifactId = 'uploader'
                    pom.version = '1.0.0'
            }
    }
}

在命令行執(zhí)行:

./gradlew :uploadversion:uploadArchives

然后去本地文件夾下面看看是否上傳成功:

圖片

本地文件成功.png

這里要說明下:

一般情況下都會(huì)將自定義插件發(fā)布到maven私服或者中央倉庫,才可以供其他項(xiàng)目使用

關(guān)于如何發(fā)布到maven私服,可以查看這篇文章

后期也會(huì)出一期文章教大家如何將數(shù)據(jù)發(fā)布到中央倉庫

步驟7.插件引入

  • 步驟1 :在工程的根build.gradle文件中引入:
buildscript {
        repositories {
                ...
                maven {
                        url uri('D:/maven_local')
                }
        }
        dependencies {
                ...
                classpath 'com.yuhb.upload:upload:1.0.0'
        }
}

說明:

com.yuhb.upload:uploader:1.0.0格式:

引入字段 發(fā)布字段
com.yuhb.upload pom.groupId
uploader pom.artifactId
1.0.0 pom.version
  • 步驟2 :在子Project中引入插件:
apply plugin: 'com.yuhb.upload'
  • 步驟3 :配置extensive插件擴(kuò)展:
versionInfo {
    versionName = '1.0.0'
    versionCode = 1
    versionUpdateInfo = '當(dāng)前是第一個(gè)版本:初始apk'
}

這個(gè)versionInfo擴(kuò)展是怎么來的呢?

我們看下之前我們配置插件的時(shí)候,使用了:

EXTENSIVE = 'versionInfo'
project.extensions.create(EXTENSIVE,VersionInfo.class)

在插件中引入extensions中的字段,就是我們Project中配置的擴(kuò)展字段:

versionInfo {
    versionName = '1.0.0'
    versionCode = 1
    versionUpdateInfo = '當(dāng)前是第一個(gè)版本:初始apk'
}

就是這里,如果外部配置了versionInfo的擴(kuò)展字段,就會(huì)通過project.extensions獲取到,并將數(shù)據(jù)寫入project.extensionsversionInfo屬性中:之后就可以使用project.extensionsversionInfo屬性訪問外部傳入的配置數(shù)據(jù):

def name = project.extensions.versionInfo.versionName
def code = project.extensions.versionInfo.versionCode
def info = project.extensions.versionInfo.versionUpdateInfo
  • 步驟4 :運(yùn)行rootbuild 任務(wù)查看編譯信息:
./gradlew build
結(jié)果:
> Task :app:uploadTask
name:1.0.0 code:1 info:當(dāng)前是第一個(gè)版本:初始apk

這里運(yùn)行build可以執(zhí)行插件中的任務(wù)是因?yàn)榍懊婀P者將插件Task掛接到了build任務(wù)之前:

掛接代碼

//3.將uploadTask任務(wù)掛架到Project的生命周期中
def build = project.tasks.getByName('build')
def uploadTask = project.tasks.getByName(TASK_NAME)
//這里使用dependsOn強(qiáng)依賴任務(wù)關(guān)系
build.dependsOn(uploadTask)

項(xiàng)目Demo完整代碼已經(jīng)上傳Github:

https://github.com/ByteYuhb/a_gradle_plugin_sample

5.總結(jié)

本文主要針對(duì)我們自定義插件定義以及優(yōu)勢(shì)做了一些說明,且使用一個(gè)實(shí)戰(zhàn)項(xiàng)目對(duì)自定義插件制作,發(fā)布,引入流程做了一個(gè)詳細(xì)的講解

,Gradle插件部分還有Gradle的上傳流程和AGP插件講解沒有講,后面都會(huì)陸續(xù)推出。

參考資料

  • Gradle自定義插件

    _官網(wǎng)文檔

  • Using Gradle Plugins _ Gradle 官方文檔

  • Gradle 系列(2)手把手帶你自定義 Gradle 插件_胡飛洋

好了,本文就講解到這里了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • project
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    13511
  • 插件
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    23053
  • gradle
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    886
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS應(yīng)用自定義鍵盤解決方案

    增強(qiáng)用戶輸入的安全性,避免敏感信息被截取或者泄露。本文介紹自定義鍵盤的實(shí)現(xiàn),并結(jié)合自定義鍵盤和系統(tǒng)鍵盤的切換、自定義鍵盤的布局避讓等場景,介紹
    的頭像 發(fā)表于 06-05 14:19 ?689次閱讀

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據(jù)讀者的具體情況顯示自定義字符。
    發(fā)表于 01-20 15:43 ?1次下載

    EDK中PS2自定義IP

    Xilinx FPGA工程例子源碼:EDK中PS2自定義IP
    發(fā)表于 06-07 11:44 ?4次下載

    占位面積很小的自定義進(jìn)度指示器progressbutton

    概述 1、描述:progressbutton是占位面積很小的自定義進(jìn)度指示器。默認(rèn)實(shí)現(xiàn)提供了一個(gè)pin進(jìn)度按鈕。 2、實(shí)現(xiàn)功能: a.自定義圓形進(jìn)度條。 b.實(shí)現(xiàn)根據(jù)Slider滑動(dòng)更新自定義
    發(fā)表于 03-18 14:45 ?3次下載

    自定義進(jìn)度指示器progressbutton

    概述 1、描述:progressbutton是占位面積很小的自定義進(jìn)度指示器。默認(rèn)實(shí)現(xiàn)提供了一個(gè)pin進(jìn)度按鈕。 2、實(shí)現(xiàn)功能:a.自定義圓形進(jìn)度條。 b.實(shí)現(xiàn)根據(jù)Slider滑動(dòng)更新自定義
    發(fā)表于 03-24 14:26 ?1次下載

    基于openharmony適配移植的自定義文本視圖

    項(xiàng)目介紹 項(xiàng)目名稱: ReadMoreTextView 所屬系列: openharmony的第三方組件適配移植 功能: 帶有修剪文本的自定義文本視圖 項(xiàng)目移植狀態(tài): 給特定文字設(shè)置點(diǎn)擊事件功能未實(shí)現(xiàn)
    發(fā)表于 03-28 11:03 ?1次下載

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progr
    發(fā)表于 04-08 10:48 ?15次下載

    ArkUI如何自定義彈窗(eTS)

    自定義彈窗其實(shí)也是比較簡單的,通過CustomDialogController類就可以顯示自定義彈窗。
    的頭像 發(fā)表于 08-31 08:24 ?2685次閱讀

    教程 2自定義配置文件示例

    教程 2自定義配置文件示例
    發(fā)表于 03-13 19:33 ?0次下載
    教程 <b class='flag-5'>2</b>:<b class='flag-5'>自定義</b>配置文件示例

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 03-15 19:39 ?0次下載
    教程 <b class='flag-5'>2</b>:添加特征-<b class='flag-5'>自定義</b>配置文件創(chuàng)建

    Gradle自定義插件介紹1

    首先來講下`Gradle`和`Gradle插件`有啥區(qū)別? > `Gradle`是一套構(gòu)建工具,其內(nèi)部構(gòu)建過程主要是以`Project`組成一個(gè)樹形的生態(tài)系統(tǒng),整個(gè)構(gòu)建流程有自己
    的頭像 發(fā)表于 03-30 11:17 ?1116次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>自定義</b><b class='flag-5'>插件</b><b class='flag-5'>介紹</b>1

    自定義算子開發(fā)

    一個(gè)完整的自定義算子應(yīng)用過程包括注冊(cè)算子、算子實(shí)現(xiàn)、含自定義算子模型轉(zhuǎn)換和運(yùn)行含自定義op模型四個(gè)階段。在大多數(shù)情況下,您的模型應(yīng)該可以通過使用hb_mapper工具完成轉(zhuǎn)換并順利部署到地平線芯片上……
    的頭像 發(fā)表于 04-07 16:11 ?3383次閱讀
    <b class='flag-5'>自定義</b>算子開發(fā)

    教程 2自定義配置文件示例

    教程 2自定義配置文件示例
    發(fā)表于 07-04 20:50 ?1次下載
    教程 <b class='flag-5'>2</b>:<b class='flag-5'>自定義</b>配置文件示例

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 07-06 18:50 ?0次下載
    教程 <b class='flag-5'>2</b>:添加特征-<b class='flag-5'>自定義</b>配置文件創(chuàng)建

    labview超快自定義控件制作和普通自定義控件制作

    labview超快自定義控件制作和普通自定義控件制作
    發(fā)表于 08-21 10:32 ?14次下載