日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

實(shí)際上手體驗(yàn)maven面對(duì)沖突Jar包的加載規(guī)則

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-08-08 11:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、問(wèn)題背景

相信大家在日常的開(kāi)發(fā)過(guò)程中都遇到過(guò)Jar包沖突的問(wèn)題,emm,在最近處理業(yè)務(wù)需求時(shí)我也遇到了不同版本jar包沖突導(dǎo)致項(xiàng)目加載出錯(cuò)的問(wèn)題。主要是一個(gè)完整的項(xiàng)目會(huì)不可避免的使用第三方的Jar包來(lái)實(shí)現(xiàn)功能開(kāi)發(fā),各種第三方包之間可能會(huì)存在依賴關(guān)系,不同版本的依賴就會(huì)可能導(dǎo)致依賴間的相互沖突,進(jìn)而導(dǎo)致整個(gè)項(xiàng)目加載的失敗。

這篇文章主要記錄了本次遇到的問(wèn)題:即maven在面對(duì)不同版本的jar包在pom文件中同時(shí)聲明會(huì)存在加載覆蓋的問(wèn)題,于是通過(guò)查詢網(wǎng)上相關(guān)資料對(duì)maven包的加載規(guī)則介紹,并通過(guò)實(shí)際場(chǎng)景對(duì)其進(jìn)行分析驗(yàn)證;

二、maven加載原則

1.最短路徑原則:面對(duì)多級(jí)(兩級(jí)及以上)的不同依賴,會(huì)優(yōu)先選擇路徑最短的依賴;

2.聲明優(yōu)先原則:面對(duì)多級(jí)(兩級(jí)及以上)的同級(jí)依賴,先聲明的依賴會(huì)覆蓋后聲明的依賴;

3.同級(jí)依賴中,后聲明的依賴會(huì)覆蓋先聲明的依賴;

三、本地驗(yàn)證maven加載原則

1.最短路徑原則:使用最短路徑加載的前提是,項(xiàng)目中存在兩級(jí)以上的不同依賴jar包,此時(shí)項(xiàng)目會(huì)優(yōu)先加載路徑最短的jar包;

wKgaoma0OdWAa8w0AAB2VXgMWjY711.png

?實(shí)例驗(yàn)證:分別在common模塊和service模塊中間接和直接的引入不同版本的elasticsearch-rest-client,觀察項(xiàng)目中面對(duì)不同路徑長(zhǎng)度情況下實(shí)際加載時(shí)所使用的版本情況。

?common模塊:common模塊中引入elasticsearch-rest-high-level-client 依賴包, 而該依賴包它引入了 elasticsearch-rest-client 7.4.2,從而實(shí)現(xiàn)在common模塊中間接引用該包;

common的pom文件:

    
        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            7.4.2
        
    

?service模塊:為了驗(yàn)證不同路徑長(zhǎng)度下maven的包加載順序,我們?cè)?strong>service模塊中直接引入elasticsearch-rest-client 6.8.13;

service的pom文件:

    
        
            org.elasticsearch.client
            elasticsearch-rest-client
            6.8.13
        
    

?實(shí)際加載結(jié)果:在IDEA中加載pom文件時(shí),可以在maven管理中看到已經(jīng)提示jar包沖突;

wKgZoma0OdeAaipNAAW8bQ33M9M375.png

?mvn dependency:tree: 我們可以通過(guò)mvn dependency :tree命令來(lái)查看該項(xiàng)目的依賴樹(shù),觀察發(fā)現(xiàn)實(shí)際加載的版本是elasticsearch-rest-client 6.8.13,符合maven中的最短路徑優(yōu)先原則;

wKgZoma0Od2AFGFbAAJd1U1NqLU170.png

?

2. 聲明優(yōu)先原則:聲明優(yōu)先原則的前提是對(duì)于兩級(jí)以上的同級(jí)依賴,先聲明的依賴會(huì)覆蓋后聲明的依賴包;

wKgaoma0Od6AVfGcAAB3NKraoWo129.png

?實(shí)例驗(yàn)證:針對(duì)該原則的驗(yàn)證場(chǎng)景構(gòu)造不再關(guān)注模塊是否直接或者間接引用不同版本的es,我們?cè)赾ommon模塊和service模塊中都直接引用不同版本的es,然后通過(guò)改變兩個(gè)模塊在pom文件中聲明的先后順序來(lái)觀察項(xiàng)目啟動(dòng)后實(shí)際加載的jar包;

?common模塊:在common模塊中直接引入依賴包elasticsearch-rest-client 7.4.2

    
        
            org.elasticsearch.client
            elasticsearch-rest-client
            7.4.2
        
    

?service模塊:在service模塊中引入依賴包elasticsearch-rest-client 6.8.13

    
        
            org.elasticsearch.client
            elasticsearch-rest-client
            6.8.13
        
    

?實(shí)際加載結(jié)果:

?場(chǎng)景1:我們將common模塊在pom文件中先引入,然后將在service模塊置于common模塊后面引入,觀察項(xiàng)目實(shí)際加載情況;

    
        
            org.example
            backend_common
            1.0-SNAPSHOT
        

        
            org.example
            backend_service
            1.0-SNAPSHOT
        
    

?觀察加載結(jié)果圖,發(fā)現(xiàn)實(shí)際加載的是es-rest-client 7.4.2, 即確實(shí)是common模塊聲明生效,service模塊后聲明導(dǎo)致其中的es未被加載。符合聲明優(yōu)先原則;

wKgZoma0Od-ADU6WAAMw7NdHJbc182.png

?場(chǎng)景2:我們將service模塊在pom文件中先引入,然后將在common模塊置于service模塊后面引入,觀察項(xiàng)目實(shí)際加載情況;;

    
         
            org.example
            backend_service
            1.0-SNAPSHOT
        
        
            org.example
            backend_common
            1.0-SNAPSHOT
        
    

?觀察項(xiàng)目實(shí)際加載結(jié)果圖,發(fā)現(xiàn)實(shí)際加載的是es-rest-client 6.8.13, 即確實(shí)是模塊聲明生效,common模塊后聲明導(dǎo)致其中的es未被加載。發(fā)現(xiàn)符合聲明優(yōu)先原則;

wKgaoma0OeGAQ3kUAANB3XZ-BcI040.png

?聲明優(yōu)先原則場(chǎng)景驗(yàn)證結(jié)束;

3. 同級(jí)依賴中后加載覆蓋先加載原則;

wKgZoma0OeKAKD6AAABcOAb-VQo519.png

?實(shí)例驗(yàn)證:為了構(gòu)造在同級(jí)依賴中的加載場(chǎng)景,我們?cè)陧?xiàng)目中直接引入兩個(gè)不同es版本的依賴,然后同樣通過(guò)改變兩個(gè)es版本在pom中的聲明順序來(lái)觀察項(xiàng)目實(shí)際加載的es版本。

?場(chǎng)景1:我們首先驗(yàn)證client 7.4.2依賴包在client 6.8.13之前聲明的情況;

    
        
            org.elasticsearch.client
            elasticsearch-rest-client
            7.4.2
        

        
            org.elasticsearch.client
            elasticsearch-rest-client
            6.8.13
        
    

?觀察maven的實(shí)際加載結(jié)果如下,發(fā)現(xiàn)項(xiàng)目中實(shí)際加載的es-rest-client 版本是6.8.13,先聲明的7.4.2版本并未實(shí)際加載到項(xiàng)目中。符合同級(jí)依賴中后加載覆蓋先加載原則。

wKgaoma0OeOAPsuUAAJzDPHmeVs054.png

?場(chǎng)景2:然后我們改變聲明順序,將client 6.8.13依賴包在client 7.4.2之前聲明;

    
        
            org.elasticsearch.client
            elasticsearch-rest-client
            6.8.13
        

        
            org.elasticsearch.client
            elasticsearch-rest-client
            7.4.2
        
    

?觀察maven實(shí)際加載結(jié)果如下,發(fā)現(xiàn)項(xiàng)目中實(shí)際加載的es-rest-client 版本是7.4.2,先聲明的6.8.13版本并未實(shí)際加載到項(xiàng)目中。符合同級(jí)依賴中后加載覆蓋先加載原則。

wKgZoma0OeSAXPFEAAJ3w85KXR0524.png

四、常見(jiàn)異常

Jar發(fā)生沖突后在程序啟動(dòng)時(shí)常見(jiàn)異常報(bào)錯(cuò),下面四種異常是能夠直觀表征Jar包加載沖突

?程序拋出java.lang.ClassNotFoundException異常;

?程序拋出java.lang.NoSuchMethodError異常;

?程序拋出java.lang.NoClassDefFoundError異常;

?程序拋出java.lang.LinkageError異常等;

五、總結(jié)

之前只是淺層的了解maven包的加載,沒(méi)有結(jié)合具體的加載原則進(jìn)行系統(tǒng)的學(xué)習(xí)驗(yàn)證,正好通過(guò)需求開(kāi)發(fā)中遇到依賴沖突相關(guān)問(wèn)題對(duì)maven的加載原則進(jìn)行探究。ok,明白啦!

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    30

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    塊RAM存儲(chǔ)器中的地址沖突場(chǎng)景

    深入研究各種寫(xiě)模式及其對(duì)地址沖突的影響。通過(guò)實(shí)際示例,我們將演示發(fā)生這些沖突的場(chǎng)景,并提供仿真截圖來(lái)說(shuō)明這些問(wèn)題的實(shí)際表現(xiàn)。雖然本文主要介紹簡(jiǎn)單雙端口 RAM,但如果設(shè)計(jì)師想要了解有關(guān)
    的頭像 發(fā)表于 04-24 09:59 ?6192次閱讀
    塊RAM存儲(chǔ)器中的地址<b class='flag-5'>沖突</b>場(chǎng)景

    使用統(tǒng)一引導(dǎo)加載程序演示 v2.1 軟件中的 S32k344 示例,編譯過(guò)程報(bào)告錯(cuò)誤,什么原因?

    使用統(tǒng)一引導(dǎo)加載程序演示 v2.1 軟件中的 S32k344 示例,編譯過(guò)程報(bào)告錯(cuò)誤。
    發(fā)表于 04-16 08:21

    EB tresos 加載失敗的原因?怎么解決?

    我按照AN13750文檔為 s32g3 構(gòu)建 ipcf 。在 EB tresos 中。我已經(jīng)復(fù)制了 RTD eclypse 插件,導(dǎo)入了集成參考示例并加載了 ecuc。但仍然沒(méi)有文件出現(xiàn)在 ECUC 下。
    發(fā)表于 04-13 07:51

    藍(lán)牙的Mesh會(huì)不會(huì)和ble功能有沖突

    高層(特別是網(wǎng)絡(luò)層和應(yīng)用層)有顯著差異。因此,在實(shí)際使用中,是否沖突取決于具體實(shí)現(xiàn)方式和硬件/軟件資源管理策略。 一、潛在沖突點(diǎn) . 頻段資源沖突 BLE 和 BLE Mesh 都工作
    發(fā)表于 01-30 20:11

    詳解網(wǎng)絡(luò)丟故障排查過(guò)程

    干運(yùn)維這么多年,見(jiàn)過(guò)各種各樣的故障,但有些問(wèn)題真的是讓人抓狂。前段時(shí)間遇到的一個(gè)MTU問(wèn)題,差點(diǎn)讓我懷疑人生。表面上看是簡(jiǎn)單的丟,實(shí)際上折騰了整整兩天才定位到根因。今天就把這個(gè)案例完整地記錄下來(lái),順便把MTU相關(guān)的知識(shí)點(diǎn)系統(tǒng)地梳理一遍,希望能幫到遇到類似問(wèn)題的兄弟們。
    的頭像 發(fā)表于 01-26 15:21 ?1065次閱讀

    圖撲軟件 3D 場(chǎng)景預(yù)加載應(yīng)用實(shí)現(xiàn)

    預(yù)加載是在進(jìn)入正式場(chǎng)景之前提前加載所需模型、材質(zhì)、圖片等資源的技術(shù)手段,其核心價(jià)值在于消除資源加載等待,確保場(chǎng)景首次渲染即可完整呈現(xiàn),從而提供無(wú)縫、流暢的用戶體驗(yàn)。在復(fù)雜的 Web 3D 可視化
    的頭像 發(fā)表于 12-01 16:04 ?1037次閱讀
    圖撲軟件 3D 場(chǎng)景預(yù)<b class='flag-5'>加載</b>應(yīng)用實(shí)現(xiàn)

    電池氣密性檢測(cè)設(shè)備使用誤區(qū),90%的人都踩過(guò)-岳信儀器

    操作人員認(rèn)為,只要電池氣密性檢測(cè)設(shè)備能正常運(yùn)行,就不需要頻繁校準(zhǔn)。實(shí)際上,氣密性檢測(cè)設(shè)備的精度會(huì)隨著使用時(shí)間和環(huán)境因素發(fā)生變化。如果不定期校準(zhǔn),檢測(cè)結(jié)果可能會(huì)出現(xiàn)
    的頭像 發(fā)表于 11-28 10:41 ?401次閱讀
    電池<b class='flag-5'>包</b>氣密性檢測(cè)設(shè)備使用誤區(qū),90%的人都踩過(guò)-岳信儀器

    RTthread怎么加載zynq的支持

    RTthread有xilinx zynq的芯片支持包了么,SDK管理器里面怎么下載ZYNQ的支持呢?求助
    發(fā)表于 09-23 06:05

    如何解決RT-Thread 編譯沖突,DIR 類型在 ff.h 與 dirent.h 中重復(fù)定義?

    軟件時(shí),編譯出現(xiàn)如下沖突: 具體是: dfs/elmfat/ff.h 中定義了 FatFS 的 DIR 結(jié)構(gòu)體 libc/dirent.h 中也定義了 POSIX 的 DIR 結(jié)構(gòu)體 導(dǎo)致沖突編譯
    發(fā)表于 09-16 06:16

    編程軟件連接PLC出現(xiàn)IP沖突時(shí)如何解決?

    一般來(lái)說(shuō),每個(gè)PLC都有自己的IP地址,用以和其他設(shè)備進(jìn)行通信。而如果同一網(wǎng)絡(luò)出現(xiàn)相同IP的設(shè)備,就會(huì)導(dǎo)致IP沖突、數(shù)據(jù)丟或ping不通等問(wèn)題。而如果IP地址沒(méi)有沖突,不在一個(gè)網(wǎng)段內(nèi)的設(shè)備也是無(wú)法
    的頭像 發(fā)表于 07-31 17:08 ?1253次閱讀
    編程軟件連接PLC出現(xiàn)IP<b class='flag-5'>沖突</b>時(shí)如何解決?

    ArkUI-X通過(guò)Stage模型開(kāi)發(fā)Android端應(yīng)用指南(一)

    arkui_android_adapter.jar所提供的StageApplication。StageApplication用于初始化資源路徑以及加載配置信息,例如: package
    發(fā)表于 06-24 22:16

    鴻蒙5開(kāi)發(fā)寶藏案例分享---優(yōu)化應(yīng)用體積大小問(wèn)題

    ;gt; 代碼,內(nèi)重復(fù)。 ? HSP動(dòng)態(tài) :所有HAP共享同一份HSP代碼,物理存儲(chǔ)僅1份。效果 :資源越多,節(jié)省越顯著(尤其圖片、公共組件庫(kù))。 ?3. OHPM依賴沖突解決:告別重復(fù)編譯
    發(fā)表于 06-13 10:09

    業(yè)務(wù)監(jiān)控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

    一、前言 當(dāng)前所測(cè)試業(yè)務(wù)需求為集成在業(yè)務(wù)系統(tǒng)WMS的jarjar測(cè)試主要集中在本地拉取開(kāi)發(fā)編寫(xiě)的代碼做單元測(cè)試,因?yàn)?b class='flag-5'>jar
    的頭像 發(fā)表于 05-27 14:40 ?1347次閱讀
    業(yè)務(wù)監(jiān)控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

    HarmonyOS優(yōu)化應(yīng)用體積大小問(wèn)題性能優(yōu)化

    和資源,消除使用HAR靜態(tài)共享造成的多(HAP、HSP)間代碼和資源的重復(fù)拷貝,從而減小應(yīng)用大小。 使用ohpm的override機(jī)制或者開(kāi)啟resolve_conflict解決依賴沖突
    發(fā)表于 05-20 14:50

    TwinCAT3 EtherCAT抓 | 技術(shù)集結(jié)

    在使用TwinCAT測(cè)試EtherCATEOE功能時(shí),我們會(huì)發(fā)現(xiàn)正常是無(wú)法使用Wireshark去進(jìn)行網(wǎng)絡(luò)抓抓取EtherCAT報(bào)文的,今天這篇文章就帶大家來(lái)上手EtherCAT抓方式。準(zhǔn)備環(huán)境
    的頭像 發(fā)表于 05-15 18:04 ?6375次閱讀
    TwinCAT3 EtherCAT抓<b class='flag-5'>包</b> | 技術(shù)集結(jié)
    定日县| 壤塘县| 金华市| 磐石市| 商城县| 静安区| 赤壁市| 佛山市| 加查县| 沙田区| 融水| 中卫市| 肃宁县| 潞城市| 宿松县| 新郑市| 锦州市| 姚安县| 得荣县| 体育| 广宁县| 丰城市| 博乐市| 河北省| 博罗县| 潮安县| 遵义县| 德昌县| 兴文县| 红安县| 禹州市| 静乐县| 都兰县| 云林县| 中山市| 云霄县| 惠安县| 田东县| 龙南县| 万宁市| 辽源市|