mirror鏡像和repository遠程倉庫、mirrorof

mirror鏡像和repository遠程倉庫

mirror就是鏡像参滴,主要提供一個方便切換遠程倉庫地址的途徑强岸。

比如,上班的時候在公司砾赔,用電信的網(wǎng)絡(luò)蝌箍,連的是電信的倉庫。

回到家后过蹂,是聯(lián)通的網(wǎng)絡(luò)十绑,我想連聯(lián)通的倉庫,就可以通過mirror配置酷勺,統(tǒng)一把我工程里的倉庫地址都改成聯(lián)通的本橙,而不用到具體工程配置文件里一個一個地改地址。

《maven實戰(zhàn)》里面解釋的鏡像:

image-20200731010445498
image-20200731010542055

mirrorof的官方文檔解釋

https://maven.apache.org/guides/mini/guide-mirror-settings.html

可以理解為脆诉,mirrorof就是鏡像規(guī)則甚亭。這個規(guī)則,將鏡像mirror(setting.xml的設(shè)置)和遠程倉庫repository(pom.xml的repository設(shè)置)關(guān)聯(lián)起來击胜。哪個遠程倉庫被哪個鏡像所替代亏狰。

如果還是沒能理解,可以看看這兩篇博客偶摔。

記錄maven配置 mirrorOf 坑

maven的setting配置文件中mirror和repository的區(qū)別

  • ==如果maven setting.xml中配置了鏡像mirror , 而鏡像mirror配置里mirrorof的規(guī)則暇唾,匹配到目標(biāo)倉庫時 ,
    maven認(rèn)為目標(biāo)倉庫被鏡像了, 不會再去被鏡像倉庫下載依賴jar包, 而是直接去鏡像倉庫下載。即maven里面設(shè)置的repository會被setting.xml里面的mirror所屏蔽。==
  • <mirrorof></mirrorof>的值為匹配repository倉庫的id策州。也可以使用高級配置瘸味,如通配符*,否定符够挂!旁仿。
<mirror>
    <id>aliyun-maven</id>    
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>repotest</mirrorOf>
</mirror> 

鏡像配置的規(guī)則 <mirrorOf>repotest</mirrorOf> 匹配到目標(biāo)倉庫 <id>repotest</id>,所以maven認(rèn)為目標(biāo)倉庫repotest被鏡像了, 不再去https://repo.maven.apache.org/maven2/地址下載jar包孽糖,而是去鏡像倉庫http://maven.aliyun.com/nexus/content/groups/public/下載jar包枯冈。

<repositories>
    <repository>
        <id>repotest</id>
        <url>https://repo.maven.apache.org/maven2/</url>
    </repository>
</repositories> 

我們通過下面例子去理解鏡像mirror和倉庫repository和mirrorof的含義

默認(rèn)中央倉庫

先把setting.xml里面的mirror配置去掉,保持<mirrors></mirrors>節(jié)點為空办悟,然后一步一步開始實踐尘奏,了解這三個的含義。

# 在pom.xml配置以下內(nèi)容:
<repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
 </repositories>
 <dependencies>
  <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0-dad1-cdh5.14.2</version>
        </dependency>
  </dependencies>
  • 可以從idea的解析maven依賴的順序誉尖,觀察出:先去cloudera倉庫找這個jar包罪既。
image-20200731161245569
  • 發(fā)現(xiàn)在cloudera倉庫沒找這個jar包铸题。所以去默認(rèn)中央倉庫去找這個jar包铡恕。
image-20200731161316685

從上面這個例子,我們可以這么理解丢间,默認(rèn)情況下探熔,maven下面的pom.xml的中央倉庫,缺省了模板倉庫id為central烘挫,url為maven中央倉庫url:https://repo.maven.apache.org/maven2/诀艰。

# 默認(rèn)中央倉庫

<repositories>
    <repository>
        <id>central</id>
        <url>https://repo.maven.apache.org/maven2/</url>
    </repository>
</repositories> 

修改默認(rèn)中央倉庫地址

我們可以在pom.xml,設(shè)置一個id為central和url來覆蓋缺省 id = central的url饮六。

<repositories>
    <repository>
        <id>central</id>
        <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
</repositories>

然后下載mysql驅(qū)動其垄,此時發(fā)現(xiàn),下載mysql驅(qū)動失敗卤橄。因為默認(rèn)中央倉庫的url被重寫成cloudera公司的目標(biāo)倉庫绿满。但cloudera公司自己搭建的倉庫里面并沒有這個jar包。所以pom.xml找不到這個jar包窟扑。

image-20200731004004686

倉庫的優(yōu)先級

先從repository找出所有id的名字喇颁,看看他們有沒有被setting.xml配置的mirror的mirrorof規(guī)則所匹配(即被鏡像到),如果有嚎货,將repository的url地址改成mirror配置的url橘霎,替換完地址后。再依次檢索repositorys下面所有的repository下載相應(yīng)的jar殖属。

例子1:

<mirrorOf>central</mirrorOf>

 <mirror>
       <id>alimaven</id>    
       <name>aliyun maven</name>
       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
       <mirrorOf>central</mirrorOf>
  </mirror> 
    <repositories>
     <repository>
        <id>central</id>
        <url>https://repo.maven.apache.org/maven2/</url>
     </repository>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
  • 鏡像url替換后會變成下面所示:
    <repositories>
     <repository>
        <id>central</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
     </repository>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
  • 然后依次從central倉庫姐叁,尋找jar包,如果找不到則到cloudera倉庫尋找jar。
  • 可以通過hadoop-client這個只有cloudera倉庫有的jar外潜,而阿里云沒有谭溉。去看看maven尋找jar包的過程。
<dependencies>
   <dependency>
   <groupId>org.apache.hadoop</groupId>
   <artifactId>hadoop-client</artifactId>
   <version>2.6.0-mr1-cdh5.14.2</version>
   </dependency>
 </dependencies>

例子2:

<mirrorOf>central</mirrorOf>加上<mirrorOf>*</mirrorOf>

   
   pom.xml的設(shè)置:
   
   <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
        <repository>
            <id>central</id>
            <url>https://arepository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
    
    
     加上setting.xml的設(shè)置:
           
     <mirror>
       <id>aliyun-maven</id>    
       <name>aliyun maven</name>
       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
       <mirrorOf>central</mirrorOf>
     </mirror> 
     <mirror>
        <id>central-Repository</id>
        <name>Maven central Repository</name>
        <url>https://repo1.maven.org/maven2/</url>
        <mirrorOf>*</mirrorOf>  
      </mirror>
      
      
 # <mirrorOf>central</mirrorOf> 匹配到遠程倉庫 <id>central</id>橡卤,所以遠程倉url替換成mirror的url扮念;
 # 因為<id>central</id>已經(jīng)被mirror的url替換了,就不再鏡像了碧库;
 # <mirrorOf>*</mirrorOf> 替換 <id>cloudera</id>的url柜与。
 
     最終的目標(biāo)倉庫:
      
     <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repo1.maven.org/maven2</url>
        </repository>
        <repository>
            <id>central</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public//</url>
        </repository>
    </repositories>   

所以一般來說setting.xml只需要配置一個central的鏡像規(guī)則就好了,一般就是阿里云就好了嵌灰,然后需要其他遠程倉庫弄匕,就手動在pom.xml里面加上repository,但不是這個第三方的倉庫就不要把repository的id寫成central沽瞭。不然就被鏡像的規(guī)則匹配到了迁匠,url被替換成阿里云的了。

setting.xml里面的mirror驹溃,可以寫多個城丧,但mirrorof的規(guī)則要從匹配范圍小到大寫。同時寫多個mirrorof的內(nèi)容為central的意義為0豌鹤,因為只有其中第一個mirror生效亡哄。

鏡像搭配遠程倉庫

一般setting.xml內(nèi)容為:

<mirrors>
 <mirror>
       <id>aliyun-maven</id>    
       <name>aliyun maven</name>
       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
       <mirrorOf>central</mirrorOf>
  </mirror> 
</mirrors>  

假設(shè)某個jar包,阿里云鏡像沒有的jar布疙,把可以下載這個jar包的遠程倉庫蚊惯,補充到pom.xml就好了。如:

   <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
  </repositories>
  • 有時公司搭建了內(nèi)網(wǎng)灵临,只能從私服下載jar包截型,這時maven項目,pom.xml的repository都是各個私服的url儒溉。

  • (假設(shè)都可以在阿里云倉庫找到這些jar包宦焦,記住這里是假設(shè)所有的可以在阿里云的https://maven.aliyun.com/repository/central下載到!U龃睢8险铩)回到家里,可以將阿里云的鏡像規(guī)則設(shè)置成 <mirrorOf>*</mirrorOf>园骆,則強制所有遠程倉庫都到這個鏡像下載url舔痪。解決了不需要修改pom.xml。

<mirrors>
    <mirror>
       <id>aliyun-maven</id>    
       <name>aliyun maven</name>
       <url>https://maven.aliyun.com/repository/central</url>
       <mirrorOf>*</mirrorOf>
     </mirror> 
 </mirrors>

如果項目里面有些jar包在https://maven.aliyun.com/repository/central倉庫找不到锌唾,那么setting.xml的mirrorOf 設(shè)置成*就不合適了锄码。應(yīng)該將 <url>https://maven.aliyun.com/repository/central</url>設(shè)置成<mirrorOf>center</mirrorOf>夺英,然后未找到的jar包再設(shè)置<mirrorOf>repository_name</mirrorOf>實現(xiàn)代理。


一般項目里面滋捶,我們應(yīng)該如何正確設(shè)置repositories和國內(nèi)鏡像呢

當(dāng)我們項目里面需要設(shè)置第三方的倉庫時痛悯,如cloudera的倉庫,那么建議<repositories>第一個先寫上<repository>倉庫的id為center重窟,再寫第三方的repository倉庫的id和url载萌。這樣項目里的jar的下載順序是從center的中央倉庫(如果我們配置了國內(nèi)鏡像則從國內(nèi)倉庫)下載,如果找不到再輪到這個第三方的倉庫巡扇。避免很多jar包在第三方倉庫找不到然后再去center的下載扭仁,很慢厅翔,我們應(yīng)該讓依賴首先去中央倉庫查找乖坠,找不到再去第三方倉庫找刀闷。

下面是我的配置

pom.xml

    <repositories>
        <repository>
            <id>central</id>
            <url>https://maven.aliyun.com/repository/central</url>
        </repository>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>   

setting.xml

    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>center</mirrorOf> 
        <name>阿里云公共倉庫</name>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>

這個配置熊泵,下載依賴的流程為:

  • 將repository中id為center的url替換成setting.xml中mirrorOf為center的url。(因為repository中id為center和setting.xml中mirrorOf為center所匹配甸昏,所以會將mirror的id為aliyunmaven的url替換掉pom里面id為center的repository顽分。)
  • 下載依賴時,先從central倉庫下載筒扒,如果找不到則從cloudera的repository倉庫查找怯邪。

有同學(xué)會有疑問:
pom.xml 這樣寫可不可以绊寻?

    <repositories>
     <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>   

答案是可以的花墩,但是如果seting.xml里面沒有配置國內(nèi)鏡像,那么從cloudera倉庫里面查找鏡像澄步,找不到鏡像冰蘑,則從默認(rèn)id為center的中央倉庫地址https://repo1.maven.org/maven2查找鏡像,下載速度會很慢村缸,且下載順序是先cloudera倉庫再center倉庫祠肥,這樣下載速度會比較慢,防止有些人沒有在setting.xml設(shè)置國內(nèi)中央倉庫的鏡像梯皿,還是建議第一個repository的id為center仇箱,url為國內(nèi)的鏡像,一舉兩得东羹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剂桥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子属提,更是在濱河造成了極大的恐慌权逗,老刑警劉巖美尸,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斟薇,居然都是意外死亡师坎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門堪滨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胯陋,“玉大人,你說我怎么就攤上這事袱箱』塘耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵犯眠,是天一觀的道長按灶。 經(jīng)常有香客問我,道長筐咧,這世上最難降的妖魔是什么鸯旁? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮量蕊,結(jié)果婚禮上铺罢,老公的妹妹穿的比我還像新娘。我一直安慰自己残炮,他們只是感情好韭赘,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著势就,像睡著了一般泉瞻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苞冯,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天袖牙,我揣著相機與錄音,去河邊找鬼舅锄。 笑死鞭达,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的皇忿。 我是一名探鬼主播畴蹭,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼元媚,長吁一口氣:“原來是場噩夢啊……” “哼罢防!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讥巡,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤老翘,失蹤者是張志新(化名)和其女友劉穎芹啥,沒想到半個月后锻离,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡墓怀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年汽纠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傀履。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡虱朵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钓账,到底是詐尸還是另有隱情碴犬,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布梆暮,位于F島的核電站服协,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏啦粹。R本人自食惡果不足惜偿荷,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唠椭。 院中可真熱鬧跳纳,春花似錦、人聲如沸贪嫂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽力崇。三九已至斗塘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間餐曹,已是汗流浹背逛拱。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留台猴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓俱两,卻偏偏與公主長得像饱狂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宪彩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容