Maven 倉庫、坐標以及依賴管理

      網友投稿 983 2025-03-31

      前言


      在我們創建使用 Maven 項目的過程中,當需要用到第三方的插件時,都是通過依賴管理來達成,也就是 Maven 項目中必有的 pom.xml 文件。POM(Project Object Model),即 項目對象模型,其中定義了 Maven 項目的形式。因此,pom.xml 可以看做是 Maven 項目中的導航。

      Maven 倉庫

      所謂倉庫,就和我們平常說的糧倉啥的差不多,其實都是用來存放東西的。只不過在 Maven 項目中,倉庫使用來存放我們項目所使用的 jar 包以及 Maven 所使用的各種 jar 包的。

      而根據倉庫存放位置的不同,我們可將其分為 本地倉庫 和 遠程倉庫。

      其中,本地倉庫也就是我們個人 PC 中存放 jar 包的文件夾,用于存放 Maven 項目所需的 jar。

      而遠程倉庫則指的是存放在互聯網中的倉庫,我們可以將其進一步細分為 中央倉庫、中央倉庫鏡像、私服。

      中央倉庫:全世界最權威的一個倉庫,我們所有的開發人員都可以共享使用,地址為:https://repo.maven.apache.org。

      中央倉庫鏡像:顧名思義,它就是中央倉庫的一個備份,它分散在各大洲的重要城市,方便各個地方的程序員使用起來更快捷。

      私服:私服則是處于安全考慮,一般搭建在局域網中,僅提供給公司內部人員使用。

      那我們如何使用倉庫呢?或者說一個 Maven 項目從倉庫中獲取資源的順序是怎樣的呢?

      通常來講,當我們要使用 Maven 倉庫中的資源時,是不需要我們去人為干預的。假設我們要使用某一個驅動,我們首先去 pom.xml 中進行配置,接著 Maven 將自動先去檢查我們的本地倉庫中是否存在該資源,如果沒有,那么就到私服中午查找,如果還沒有找到,那么就到中央倉庫鏡像中去查詢,最后如果連鏡像倉庫中也沒法找到,那就只有到中央倉庫去進行搜索了。

      Maven 坐標

      坐標,其實就相當于我們人的身份證,它是唯一的,用于標識一個項目。一個坐標的組成一般有如下幾部分,前三者必須,packaging 可選,classifier 不能直接定義。

      groupId:定義 Maven 項目隸屬的實際組織,一般約定以創建該項目的組織名稱的逆向域名開頭。比如說公司的域名是:google.com,那么我們就可以將 groupId 設置為 com.google。

      artifactId:定義實際項目中的一個 Maven 項目(模塊),推薦使用實際項目名作為前綴。

      version:定義 Maven 項目當前所處版本,一般使用三位數字進行標識,如 1.1.1。

      packaging:項目打包方式,可以是 jar、war、rar、ear、pom,默認使用 jar。

      classifier:幫助定義構建輸出的一些附屬構建,與主構件對應。

      dependencies:添加項目所需的 jar 所對應的 Maven 坐標,,表示我們項目中所需的各種資源說明。

      dependency:dependencies 的一個子標簽,一個 dependency 對應一個坐標。

      properties:用于設置屬性。

      scope:表示依賴的范圍,通常有如下幾種:

      以下就是一個最簡單的 Maven 坐標實例:

      com.cunyu MavenDemo 1.1.1

      依賴沖突

      沖突產生原因

      Maven 項目中,通常都會定義血多 dependency,每個 dependency 內部也會定義它的 dependency,而有時各個依賴之間會產生沖突,沖突的原因通常主要是 由于 jar 包依賴的傳遞性,如果在一個項目中同時引入了一個依賴的不同版本,就可能導致依賴沖突。

      解決沖突的辦法

      當沖突產生時,需要如何解決呢?通常我們有兩種處理策略:

      Maven 的默認處理策略:

      最短路徑優先:對于不同路徑長度的 jar 包,優先選擇路徑更短的生效。

      最先聲明優先:當路徑一樣時,如 A -> B -> C ,E -> F -> C,那么則誰先聲明則先選擇誰生效。

      移除依賴:用于排除某項依賴的依賴包

      除開上述策略外,我們也可以手動在 pom.xml 中使用 標簽來排除發生沖突的依賴包,如下面用于排除 spring-core 沖突的例子:

      org.springframework spring-context 5.1.9.RELEASE org.springframework spring-core

      Maven 倉庫、坐標以及依賴管理

      總結

      今天關于 Maven 的倉庫和坐標的相關知識,以及 Maven 中依賴產生沖突的原因和如何解決沖突的內容就到此結束了。個人水平有限可能有些遺漏的方面,如果你有更多關于以上方面的知識,歡迎評論交流。既然差不多講完了 Maven 中的核心知識點,那么下一次我們就來看看怎么使用 Maven 來進行實戰吧。

      Java Maven

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:圖書借閱管理系統(java圖書借閱管理系統)
      下一篇:DAS之 數據庫自動化運維功能展播5:實時分析
      相關文章
      国产偷国产偷亚洲高清日韩| 亚洲欧洲精品成人久久曰影片| 中文字幕在亚洲第一在线| 亚洲综合无码无在线观看| 亚洲欧洲国产经精品香蕉网| 日产亚洲一区二区三区| 亚洲福利视频一区| 国产AV无码专区亚洲Av| 亚洲AV无码成人网站久久精品大 | 亚洲无码日韩精品第一页| jizzjizz亚洲日本少妇| 精品亚洲国产成人av| 国产亚洲精品成人久久网站| 337P日本欧洲亚洲大胆精品| 国产成人不卡亚洲精品91| 成人亚洲网站www在线观看 | 亚洲av片一区二区三区| 亚洲高清视频一视频二视频三| 亚洲国产成人影院播放| 亚洲视频在线免费| 久久亚洲av无码精品浪潮| 亚洲综合日韩久久成人AV| 亚洲国产另类久久久精品| 亚洲国产高清在线| 亚洲第一网站免费视频| 亚洲午夜精品国产电影在线观看| 激情内射亚洲一区二区三区爱妻| 一本色道久久88—综合亚洲精品| 亚洲人片在线观看天堂无码| 国产成人人综合亚洲欧美丁香花 | 亚洲国产成人久久一区久久| 亚洲中文字幕伊人久久无码| 国产亚洲av片在线观看16女人| 亚洲高清在线观看| 亚洲人成综合在线播放| 亚洲日本va一区二区三区| 亚洲国产主播精品极品网红| 亚洲精品无码乱码成人| 久久亚洲精品无码AV红樱桃| 亚洲国产精品免费观看 | 99人中文字幕亚洲区|