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

在我們創建使用 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 坐標實例:
依賴沖突
沖突產生原因
Maven 項目中,通常都會定義血多 dependency,每個 dependency 內部也會定義它的 dependency,而有時各個依賴之間會產生沖突,沖突的原因通常主要是 由于 jar 包依賴的傳遞性,如果在一個項目中同時引入了一個依賴的不同版本,就可能導致依賴沖突。
解決沖突的辦法
當沖突產生時,需要如何解決呢?通常我們有兩種處理策略:
Maven 的默認處理策略:
最短路徑優先:對于不同路徑長度的 jar 包,優先選擇路徑更短的生效。
最先聲明優先:當路徑一樣時,如 A -> B -> C ,E -> F -> C,那么則誰先聲明則先選擇誰生效。
移除依賴:用于排除某項依賴的依賴包
除開上述策略外,我們也可以手動在 pom.xml 中使用
總結
今天關于 Maven 的倉庫和坐標的相關知識,以及 Maven 中依賴產生沖突的原因和如何解決沖突的內容就到此結束了。個人水平有限可能有些遺漏的方面,如果你有更多關于以上方面的知識,歡迎評論交流。既然差不多講完了 Maven 中的核心知識點,那么下一次我們就來看看怎么使用 Maven 來進行實戰吧。
Java Maven
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。