Maven依賴解析過程詳細講解

Maven依賴解析是一個遞歸的過程,涉及從項目的POM文件開始,逐步解析直接依賴和傳遞依賴。以下是詳細的解析過程:

  1. 讀取項目的POM文件

    • Maven首先讀取項目的POM文件 (pom.xml),該文件定義了項目的直接依賴。
  2. 解析直接依賴

    • Maven解析POM文件中的?<dependencies>?元素,獲取所有直接依賴的信息(包括依賴的坐標:groupId, artifactId, version)。
  3. 下載直接依賴

    • Maven從本地倉庫緩存中查找這些直接依賴。如果在本地倉庫中找不到,則從遠程倉庫(如Maven Central或其他配置的倉庫)下載這些依賴,并緩存到本地倉庫中。
  4. 解析傳遞依賴

    • 對于每個直接依賴,Maven會讀取這些依賴的POM文件。每個依賴的POM文件也可能包含?<dependencies>?元素,定義了該依賴的直接依賴(即傳遞依賴)。
  5. 遞歸解析傳遞依賴

    • Maven遞歸地解析每個傳遞依賴的POM文件,重復上述步驟,直到所有依賴樹的節點都被解析完畢。
  6. 依賴樹的構建

    • Maven構建一個依賴樹(Dependency Tree),其中包含所有直接和傳遞依賴。這個樹結構有助于理解依賴關系以及依賴沖突的解決。
  7. 版本沖突解決

    • 如果在依賴樹中存在同一依賴的多個版本,Maven會使用最近的祖先(nearest ancestor)的版本。這意味著在解析依賴樹時,Maven會選擇距離根節點最近的那個版本。
  8. 下載傳遞依賴

    • 對于所有解析出來的傳遞依賴,Maven同樣會從本地倉庫查找這些依賴,如果找不到則從遠程倉庫下載并緩存。
  9. 依賴合并

    • 最后,Maven將所有解析到的依賴合并到項目的依賴列表中,確保所有需要的庫都被正確下載和包含。

示例

假設有一個項目A,依賴于庫B和庫C,而庫B又依賴于庫D和庫E,庫C依賴于庫F。

  1. 項目A的POM文件:

    <dependencies><dependency><groupId>com.example</groupId><artifactId>B</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.example</groupId><artifactId>C</artifactId><version>1.0.0</version></dependency>
    </dependencies>
    
  2. 庫B的POM文件:

    <dependencies><dependency><groupId>com.example</groupId><artifactId>D</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.example</groupId><artifactId>E</artifactId><version>1.0.0</version></dependency>
    </dependencies>
    
  3. 庫C的POM文件:

    <dependencies><dependency><groupId>com.example</groupId><artifactId>F</artifactId><version>1.0.0</version></dependency>
    </dependencies>
    

依賴解析過程

  1. 解析項目A的POM文件,發現直接依賴B和C。
  2. 下載B和C
  3. 解析B的POM文件,發現傳遞依賴D和E。
  4. 下載D和E
  5. 解析C的POM文件,發現傳遞依賴F。
  6. 下載F
  7. 構建依賴樹
    A
    ├── B
    │   ├── D
    │   └── E
    └── C└── F
    
  8. 解決版本沖突(如果有)。
  9. 合并依賴,最終項目A的依賴包括B、C、D、E、F。

java.lang.NoClassDefFoundError的原因

java.lang.NoClassDefFoundError?異常通常發生在運行時,表示JVM在類加載時找不到需要的類。其常見原因包括:

  1. 缺少依賴

    • 項目運行時所需的某些依賴未包含在類路徑中。例如,某個庫在編譯時存在,但在運行時缺失。
    • 解決方法:確保所有必要的依賴都已正確配置并包含在項目的類路徑中。
  2. 依賴沖突

    • 項目中存在不同版本的同一依賴,導致類加載錯誤。
    • 解決方法:使用Maven的?dependency:tree?插件來檢查依賴沖突,并在POM文件中強制指定版本。
  3. 類路徑配置錯誤

    • 項目的類路徑配置不正確,導致某些庫未被加載。
    • 解決方法:檢查和修正類路徑配置,確保所有必要的庫都被正確包含。
  4. 打包問題

    • 在打包過程中,某些依賴未正確打包到最終的可執行文件(如JAR或WAR)中。
    • 解決方法:檢查打包配置(如Maven的?maven-assembly-plugin?或?maven-shade-plugin),確保所有依賴都被正確打包。
  5. 環境問題

    • 項目運行的環境與開發環境不一致,例如不同的JDK版本或環境變量配置不正確。
    • 解決方法:確保運行環境與開發環境一致,并正確配置所有環境變量。

通過以上步驟和檢查,可以有效地解析Maven依賴并解決?java.lang.NoClassDefFoundError?異常。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38415.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38415.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38415.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32第十五課:LCD屏幕及應用

文章目錄 需求一、LCD顯示屏二、全屏圖片三、數據顯示1.顯示歡迎詞2.顯示溫濕度3.顯示當前時間 四、需求實現代碼 需求 1.在LCD屏上顯示一張全屏圖片。 2.在LCD屏上顯示當前時間&#xff0c;溫度&#xff0c;濕度。 一、LCD顯示屏 液晶顯示器&#xff0c;簡稱 LCD(Liquid Cry…

node_sqlite3.node is not a valid win32 application

electron打包報錯 使用electron在linux平臺打包含有sqlite3的項目為win32應用時在運行階段&#xff0c;有時會遇到下面的錯誤 node_sqlite3.node is not a valid win32 application出現該錯誤的原因主要是在64bit的linux環境中&#xff0c;sqlite3默認build出來的二進制文件不…

【Windows】Visual Studio Installer下載緩慢解決辦法

【Windows】Visual Studio Installer下載緩慢解決辦法 1.背景2.分析3.結果 1.背景 使用visual studio在線安裝包進行IDE安裝&#xff0c;發現下載幾乎停滯&#xff0c;網速幾乎為零。 經過排查并不是因為實際網絡帶寬導致。 這里涉及DNS知識&#xff1b; DNS&#xff08;Dom…

消防認證-防火卷簾

一、消防認證 消防認證是指消防產品符合國家相關技術要求和標準&#xff0c;且通過了國家認證認可監督管理委員會審批&#xff0c;獲得消防認證資質的認證機構頒發的證書&#xff0c;消防產品具有完好的防火功能&#xff0c;是住房和城鄉建設領域驗收的重要指標。 二、認證依據…

TP8 JS(html2canvas) 把DIV內容生成二維碼并與背景圖、文字組合生成分享海報

方法一&#xff1a;前端JS生成(推薦) 注意&#xff1a; 1.這個網頁只能截圖圖片效果代碼&#xff0c;其它任何html效果都不能有&#xff0c;不然截圖就不準確 2.如果要生成的圖片DIV內容中引用了第三個方的圖片&#xff0c;就是不使用同一個域名下的圖片&#xff0c;需要把后…

Python爬取淘寶商品評價信息實戰:從零到一的高效教程

引言&#xff1a;揭秘淘寶數據金礦 在電商領域&#xff0c;用戶評價是衡量產品優劣的金標準。作為Python爬蟲工程師&#xff0c;掌握從淘寶這座數據金礦中挖掘寶貴評價信息的技能至關重要。本文將帶你手把手實操&#xff0c;用Python爬蟲技術獲取淘寶商品的評價信息&#xff0…

Docker多階段構建Node.js應用程序

Node.js 應用程序 創建一個目錄來存放你的項目文件&#xff0c;然后在該目錄下創建以下文件。 package.json {"name": "docker-node-test","version": "1.0.0","description": "A simple Node.js app for Docker mu…

【折騰筆記】使用 PicList + Lsky Pro 對圖片進行雙重壓縮

前言 因為服務器的帶寬比較小,為了提高網站的訪問速度,網站內的圖片進行壓縮是必不可少的。另外將圖片轉換成WebP的格式可以減小文件大小、加快加載速度、支持高級特性(如透明度和動畫),以及減少存儲需求,為網站提供了顯著的性能。需要提前安裝好PicList客戶端和Lsky Pr…

最快33天錄用!一投就中的醫學4區SCI,幾乎不退稿~

【SciencePub學術】今天小編給大家推薦2本生物醫學領域的SCI&#xff0c;此期刊為我處目前合作的重點期刊&#xff01;影響因子0-3.0之間&#xff0c;最重要的是審稿周期較短&#xff0c;對急投的學者較為友好&#xff01; 醫學醫藥類SCI 01 / 期刊概況 【期刊簡介】IF&…

那些好用的 Vue3 的工具搭子!!【送源碼】

2020 年 9 月 18 日 Vue3 的正式發布已經過去了大約 3 年 9 個月左右&#xff01;&#xff01;&#xff01; 隨著 Vue3 版本的逐漸成熟&#xff0c;我們的前端世界也迎來了一系列令人振奮的更新和工具。Vue 生態圈的持續擴大&#xff0c;無疑為前端開發人員帶來了前所未有的便…

通過pycharm使用git和github的步驟

一、在Pycharm工具中配置集成Git和GitHub。 1.集成Git。 打開Pycharm, 點擊File-->Settins-->Version Control-->Git 然后在 Path to Git executable中選擇本地的git.exe路徑。如下圖&#xff1a; 2.集成GitHub 打開Pycharm, 點擊File-->Settins-->Version…

探索未來遠程調試新紀元——《串口網口遠程調試軟件》:無縫連接,高效調試

文章目錄 前言一、無縫連接&#xff0c;突破距離限制二、高效調試&#xff0c;提升工作效率三、安全可靠&#xff0c;保護數據安全四、用戶友好&#xff0c;簡化操作流程五、軟件地址六、遠程調試軟件 七、基本操作1、訂閱主題2、連接3、串口調試4、網口調試 八、軟件地址結束語…

PO模式登錄測試

項目實踐 登陸項目測試 get_driver import page from selenium import webdriverclass GetDriver:driver Noneclassmethoddef get_driver(cls):if cls.driver is None:cls.driver webdriver.Edge()cls.driver.maximize_window()cls.driver.get(page.url)return cls.drivercl…

Java高風險漏洞與修復之——LDAP injection(LDAP注入)

LDAP注入介紹 LDAP注入是一種攻擊技術,它可以利用應用程序中的安全漏洞對LDAP(輕量級目錄訪問協議)服務進行惡意查詢或修改操作。當應用程序未能適當地清理用戶的輸入內容,將其嵌入到LDAP查詢中時,就可能發生LDAP注入。攻擊者通過注入未經授權的指令或條件來操縱查詢結果…

【代碼隨想錄訓練營】【Day 66】【圖論-3】| 卡碼 101-104

【代碼隨想錄訓練營】【Day 66】【圖論-3】| 卡碼 101-104 需強化知識點 103&#xff0c;104 優化思路 題目 101. 孤島的總面積 此處 area 多余 def dfs(grid, x, y, area):dirs [[0, 1], [0, -1], [1, 0], [-1, 0]]m, n len(grid), len(grid[0])area[0] 1grid[x][y] …

k8s學習筆記——k8s升級

前一段時間&#xff0c;由于搭建k8s集群的硬件設備故障&#xff0c;老化導致k8s需要重裝。使用原來的kubeadm安裝方式卻發現裝不了了。查了一下官方文檔&#xff0c;說從v1.24版本之后&#xff0c;kubelet移除了容器引擎&#xff0c;容器及鏡像管理將有第三方工具來接管&#x…

Vue.js有哪些優點和缺點

Vue.js 作為一個流行的前端框架&#xff0c;具有許多優點和一些潛在的缺點。以下是 Vue.js 的一些主要優點和缺點&#xff1a; 優點&#xff1a; 輕量級和靈活性&#xff1a;Vue.js 的核心庫專注于視圖層&#xff0c;這使得它非常輕量級&#xff08;壓縮后只有幾十KB&#xff…

Web 反爬指南

本質上說&#xff0c;防抓的目的在于增加腳本或機器獲取你網站內容的難度&#xff0c;而不要影響真實用戶的使用或搜索引擎的收錄 不幸的是這挺難的&#xff0c;你需要在防抓和降低真實用戶以及搜索引擎的可訪問性之間做一下權衡。 為了防爬&#xff08;也稱為網頁抓取、屏幕…

智譜AI: ChatGLM API的使用

一、獲取API 1、打開網址&#xff1a;智譜AI開放平臺 注冊賬號登錄 2、登錄&#xff0c;查看API key (注冊后贈送100萬token&#xff0c;實名認證后多贈送400萬, 有效期一個) 二、安裝及調用 安裝質譜SDK pip install zhipuai調用方式 流式調用 from zhipuai import ZhipuA…

開放簽電子簽章,讓簽字有跡可循

開放簽&#xff08;企業版&#xff09;V2.0.5版本上線后&#xff0c;系統支持一鍵查詢電子文件的簽署操作記錄&#xff0c;支持一鍵生成詳細的簽署記錄報告&#xff0c;詳細請看下圖&#xff1a; 1、操作記錄詳情&#xff1a; 從合同發起、填寫、簽署、撤銷等環節全流程展示操…