第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Maven 倉庫

在之前的章節(jié)中,我們分別介紹了 Maven 中的工程對象模型(POM)以及 Maven 的依賴管理,但是,這個時候,我們勢必會有一個疑問,當我找到一個依賴的坐標后,只需要將該坐標放入到我項目的 POM 文件當中,這個依賴就算是被引入了,那這個依賴是從哪里來的呢?

在本節(jié)中,我們就帶著這個疑問來學習 Maven 的倉庫,了解如何使用 Maven 倉庫。

1. 什么是 Maven 倉庫

我們先想象一下,如果沒有 Maven,我們在開發(fā)不同項目的時候,如果需要依賴同一個 jar 包,那么就需要分別在兩個不同項目中將這個 jar 包引入進去,對于一個程序員來說,這樣的做法顯然是不合理的,不僅需要我們手動到處復制,而且會多占用我們的磁盤空間。

那這個時候,Maven 倉庫就出現(xiàn)了。我們通常把依賴稱為構(gòu)件,每一個構(gòu)件都有自己唯一的坐標,基于這種模式,我們就可以把這些構(gòu)件存放在一個指定的位置–Maven倉庫當中,然后通過其坐標來尋找該構(gòu)件。

在我們學習或者實際開發(fā)過程中,只需要在我們的項目當中聲明依賴的坐標,在項目編譯的或者打包的過程中,Maven 會自動從倉庫中去尋找該構(gòu)件,這樣就不需要我們在本地存儲這個依賴了。

2. 倉庫的分類

對于 Maven 來說,主要的倉庫種類可以分為兩種,一種是本地倉庫,另一種是遠程倉庫。而在遠程倉庫當中呢,又可以分為中央倉庫,私服和其他的公共倉庫。
圖片描述

2.1 本地倉庫

在我們聲明的 MAVEN_HOME 路徑下,找到 conf\settings.xml,其中可以看到 Maven 的本地倉庫路徑配置:

從上圖我們可以看到,Maven 的默認本地倉庫路徑是在 ${user.home}/.m2/repository,我們?yōu)榱朔奖銓⑵湫薷臑榱?D:\repo

2.2 中央倉庫

Maven 中默認配置了中央倉庫,我們可以在超級 POM 里面找到對應的配置。

這個倉庫是由 Maven 社區(qū)來維護的,里面存放了絕大多數(shù)開源軟件的包,并且是作為 Maven 的默認配置,不需要開發(fā)者額外配置。另外為了方便查詢,還提供了一個查詢地址,開發(fā)者可以通過這個地址更快的搜索需要構(gòu)件的坐標。

2.3 其他遠程倉庫

有了中央倉庫,我們?yōu)槭裁催€需要其他的遠程倉庫呢?

  • 我們要找的構(gòu)件可能不存在于中央倉庫中;
  • 由于某些原因,訪問中央倉庫的速度相對較慢。

這種時候,我們就可以選擇一個使用起來相對方便的遠程倉庫來配置,大大提高了我們的開發(fā)效率。

國內(nèi)常用的 Maven 倉庫:

  • 阿里云鏡像:

    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    
  • 阿里巴巴鏡像:

    <mirror>
        <id>ibiblio</id>
        <mirrorOf>central</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
    </mirror>
    
  • repo2 鏡像:

    <mirror>  
        <id>repo2</id>  
        <mirrorOf>central</mirrorOf>  
        <name>Human Readable Name for this Mirror.</name>  
        <url>http://repo2.maven.org/maven2/</url>  
    </mirror>
    

我們可以將對應的倉庫的鏡像配置到 settings.xml 文件中的 mirrors 節(jié)點中即可。如下圖所示,我們配置了阿里云的鏡像。

2.4 私服

私服也是屬于遠程倉庫的一種,相對公共倉庫而言屬于某個公司或者某個開發(fā)團隊私有的遠程倉庫。通常部署在某個局域網(wǎng)內(nèi),提供局域網(wǎng)的內(nèi)部用戶使用。

那私服有什么好處呢?

  • 更快的下載速度:由于是局域網(wǎng)內(nèi)部的請求,因此下載構(gòu)件的速度是可以保證的;
  • 更穩(wěn)定的構(gòu)建:想象一下,如果我們依賴某個外部的遠程倉庫,當這個倉庫出現(xiàn)不可能用的情況,哪怕是網(wǎng)絡的波動,都有可能會造成我們的構(gòu)建失?。?/li>
  • 部署第三方構(gòu)件:如果一個公司使用了微服務架構(gòu),那么公共倉庫是肯定沒辦法獲取這些私有的構(gòu)件的。

當我們需要一個構(gòu)件的時候,Maven 會先去請求私服,如果發(fā)現(xiàn)私服中,沒有該構(gòu)件,那么就會去配置了的遠程倉庫中尋找,并且緩存到我們的私服中,為后續(xù)的下載請求提供服務。

3. Maven 的依賴解析順序

我們知道了 Maven 通過坐標去倉庫中尋找對應的構(gòu)件,那么這個機制的原理是怎么樣的呢?

Maven 在尋找需要的依賴的時候,會遵照下面的順序:

  1. 如果構(gòu)件的依賴范圍是 system,Maven 會直接從本地的文件系統(tǒng)來解析該構(gòu)件;
  2. 根據(jù)配置的依賴坐標,在本地倉庫中尋找該構(gòu)件,如果能夠搜索到,則解析成功;
  3. 如果本地倉庫沒有搜索到,那么就會去已經(jīng)配置了的遠程倉庫中搜索該構(gòu)件,搜索到后,下載到本地倉庫中,提供項目使用;
  4. 如果依賴的版本是 RELEASE 或 LATEST,那么就會根據(jù)更新策略去讀取所有遠程倉庫中的元數(shù)據(jù)信息(groupId/artifactId/maven-metadata.xml),并且與本地倉庫中對應的元數(shù)據(jù)合并后,計算出真實值,再將其下載到本地倉庫中;
  5. 如果依賴的版本是 SNAPSHOT,那么就會根據(jù)更新策略去讀取所有遠程倉庫中的元數(shù)據(jù)信息(groupId/artifactId/version/maven-metadata.xml),并且與本地倉庫中對應的元數(shù)據(jù)信息合并后,得到最新的快照版本值,根據(jù)這個值去尋找對應的依賴;
  6. 解析出的快照版本一般是帶有時間戳的,下載下來后,會將該時間戳刪掉,以無時間戳的形式來使用。

4. 小結(jié)

在本節(jié)中,我們介紹了什么是 Maven 倉庫,主要的倉庫分類以及不同倉庫的特點。最后我們還介紹了從 Maven 倉庫中的依賴解析機制。