前言
一、順序
maven項目使用的倉庫一共有如下幾種方式:
- 中央倉庫,這是默認的倉庫
- 鏡像倉庫,通過 sttings.xml 中的 settings.mirrors.mirror 配置
- 全局profile倉庫,通過 settings.xml 中的 settings.repositories.repository 配置
- 項目倉庫,通過 pom.xml 中的 project.repositories.repository 配置
- 項目profile倉庫,通過 pom.xml 中的 project.profiles.profile.repositories.repository 配置
- 本地倉庫
搜索順序如下:
local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central
================
查詢順序
現在maven的查詢順序為:
首先在本地資源庫中查找依賴,若不存在,則進入下一步,否則,退出;
然后在 遠程倉庫(私服) 中查找依賴,若不存在,則進入下一步,否則,退出;
最后在 中央倉庫 中查找依賴,若不存在,則提示錯誤信息,退出。
================
三個倉庫:
本地倉庫:本地的一個文件夾,用來存放所有的jar包,由自己維護;
遠程倉庫(或私服):由公司或單位創建的一個倉庫,由公司維護;
中央倉庫:互聯網上的倉庫,由Maven團隊維護;
=========
maven的倉庫只有兩大類:
1.本地倉庫
2.遠程倉庫,在遠程倉庫中又分成了3種:
2.1 中央倉庫
2.2 私服
2.3 其它公共庫
參看鏈接:https://www.cnblogs.com/YuyuanNo1/p/12938161.html
二、MAVEN 倉庫加載順序
2.1如果未配置有 mirrorOf * 的鏡像倉庫按照下面順序獲取jar
1 、查找本地倉庫
2 、查找全局repository倉庫配置並且按配置文件編輯倒序查找
【如果配置多個全局私服倉庫,就算其中一個找到jar也會繼續執行其他全局私服倉庫下載操作,是否存在覆蓋關系無法驗證;如果全局有配置的情況下,未找到jar直接拋錯,不會去項目配置的私有倉庫下載資源】
3 、查找項目的repository倉庫配置
【如果全局倉庫找到jar,還會繼續下載項目配置的私有倉庫資源,是否存在覆蓋關系無法驗證;如果全局倉庫無法找到jar,直接拋錯,不會繼續下載項目私服倉庫配置】
4 、查找中央倉庫,如果沒有配置mirror 就默認中央倉庫地址 https://repo.maven.apache.org/maven2
5 、查找中央倉庫,如果配置了mirror並且配置多個mirrorOf 是central 只會獲取第一個配置進行下載jar
2.2如果配置有 mirrorOf * 的鏡像倉庫
<mirrors> <mirror> <id>xx-repository</id> <name>xxx</name> <mirrorOf>*</mirrorOf> <url>xxxxx</url> </mirror> </mirrors>
則忽略上述規則,只從此倉庫獲取jar包。
1.<mirrorOf>*</mirrorOf>匹配所有遠程倉庫。
2.<mirrorOf>external:*</mirrorOf>匹配所有遠程倉庫,使用localhost的除外,使用file://協議的除外。也就是說,匹配所有不在本機上的遠程倉庫。
3.<mirrorOf>repo1,repo2</mirrorOf>匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫。
4.<mirrorOf>*,!repo1</miiroOf>匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。
2.3個人總結
總體來說,根據實驗,得出以下個人想法:
1、本地倉庫永遠是第一個被查找的對象。
2、本地倉庫找不到了,他會判斷maven是否配置了<mirrorOf>*</mirrorOf>的鏡像,如果是則從這里下載,不是則往下走。
3、判斷是否存在私服配置,不管是maven settings.xml全局配置還是項目的pom私有配置,如果有則優先全局而后是項目私有,都會下載一遍jar【更正,取決於私服相關配置和啟用條件】,是否存在覆蓋關系無法驗證。若都是啟用狀態則全局配置按配置文件倒序排優先級,找不到挨個往上找,但如果全局下不到jar就直接拋錯了,不會繼續去項目pom配置的私服下載。
4、查找中央倉庫是否配置鏡像,有走鏡像,無走默認鏡像。
參看鏈接:https://blog.csdn.net/kkillala/article/details/105809519