1. 程式人生 > 其它 >Maven從倉庫中解析依賴的機制

Maven從倉庫中解析依賴的機制

  當本地倉庫沒有依賴構件的時候,Maven會自動從遠端倉庫下載;當依賴版本為快照版本的時候,Maven會自動找到最新的快照。

  這背後的依賴解析機制可以概括如下:
1)當依賴的範圍是system的時候,Maven直接從本地檔案系統解析構件。
2)根據依賴座標計算倉庫路徑後,嘗試直接從本地倉庫尋找構件,如果發現相應構件,則解析成功。
3)在本地倉庫不存在相應構件的情況下,如果依賴的版本是顯式的釋出版本構件,如1.2、2.1-beta-1等,則遍歷所有的遠端倉庫,發現後,下載並解析使用。
4)如果依賴的版本是RELEASE或者LATEST,則基於更新策略讀取所有遠端倉庫的元資料groupld/artifactId/maven-metadata.xml,將其與本地倉庫的對應元資料合併後,計算出 RELEASE或者LATEST真實的值,然後基於這個真實的值檢查本地和遠端倉庫,如步驟2)和3)。


5)如果依賴的版本是SNAPSHOT,則基於更新策略讀取所有遠端倉庫的元資料groupld/artifactId/version/maven-metadata.xml,將其與本地倉庫的對應元資料合併後,得到最新快照版本的值,然後基於該值檢查本地倉庫,或者從遠端倉庫下載。
6)如果最後解析得到的構件版本是時間戳格式的快照,如1.4.1-20091104.121450-121,則複製其時間戳格式的檔案至非時間戳格式,如SNAPSHOT,並使用該非時間戳格式的構件。

  當依賴的版本不明晰的時候,如RELEASE、LATEST 和SNAPSHOT,Maven就需要基於更新遠端倉庫的更新策略來檢查更新。在maven倉庫配置中,有一些配置與此有關:首先是<releases> <enabled >和<snapshots><enabled>,只有倉庫開啟了對於釋出版本的支援時,才能訪問該倉庫的釋出版本構件資訊,對於快照版本也是同理;其次要注意的是<releases > 和<snapshots >的子元素<updatePolicy>,該元素配置了檢查更新的頻率,每日檢查更新、永遠檢查更新、從不檢查更新、自定義時間間隔檢查更新等。最後,使用者還可以從命令列加人蔘數-U,強制檢查更新,使用引數後,Maven就會忽略<updatePolicy>的配置。