1. 程式人生 > >maven配置多倉庫鏡像(轉)

maven配置多倉庫鏡像(轉)

區別 組合 conf tail bar AI posit 奇葩 HR

原文地址:maven配置多倉庫鏡像

問題場景:

1、國內訪問maven默認遠程中央鏡像特別慢

2、用阿裏的鏡像替代遠程中央鏡像

3、大部分jar包都可以在阿裏鏡像中找到,部分jar包在阿裏鏡像中沒有,需要單獨配置鏡像

我想達到的目標:

在maven中配置一主一副兩個鏡像,大部分jar直接通過主鏡像可以找到,部分特殊jar在主鏡像中找不到時,自動去副鏡像中尋找。

我所處的階段:

修改了maven的全局配置文件setting.xml(其所處位置maven的安裝目錄maven/apache-maven-3.3.9/conf/setting.xml):

1、配置了本地倉庫:

[html]
view plain copy
  1. <localRepository>D:/maven/repository</localRepository>


2、配置了中央倉庫的鏡像:(換成了阿裏的)

[html] view plain copy
  1. <mirror>
  2. <id>nexus-aliyun</id>
  3. <name>nexus-aliyun</name>
  4. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>


希望你也做到了這一步。並且知道了mirrorOf為什麽要配置為central

我所做的嘗試:

我想在全局配置文件setting.xml配置兩個鏡像,希望有主從的區別,希望maven能在大部分情況下去阿裏鏡像下載jar包,個別情況去附屬鏡像下載jar包。

最有用的一篇博文,這位大拿翻譯了maven的官網,請看連接:大拿講Maven settings配置中的mirrorOf

其實關鍵就是要搞懂mirrorOf和鏡像的先後順序

與是我在setting.xml裏對這兩個主從鏡像,嘗試了各種mirrorOf和順序的組合,最後發現如下配置實現了我的願望

[html] view plain copy
  1. <mirror>
  2. <id>奇葩-mirror</id>
  3. <name>奇葩-mirror</name>
  4. <url>https://奇葩/repo/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>
  7. <mirror>
  8. <id>nexus-aliyun</id>
  9. <name>nexus-aliyun</name>
  10. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  11. <mirrorOf>*</mirrorOf>
  12. </mirror>

以上配置,當maven發現所需的奇葩jar在阿裏鏡像中沒有時,會自動去奇葩鏡像中尋找。奇葩jar的確下載下來了。

問題解決了,但是!我覺得這樣很不爽!對,你可能覺得我有強迫癥,但的確是這樣,我覺得很不爽,難道你不這樣認為麽

maven的mirrorOf配置設計的很不科學,以上配置算解決了我的問題,但是我覺得這樣的mirrorOf配置在語義上很不符合我的邏輯。

為什麽要給一個很少用到的鏡像配置一個central?

如果有大拿發現有更好的配置邏輯和語義請告訴我

現實就是這樣,當你發現可以臨時解決問題時(可能是碰巧,隱患還很多),碰巧你還很忙,繼續改進的動力也就止步了,是的我就認為問題到此截至了,如果我有空的話,我就改maven的源碼,重寫一套mirrorOf的邏輯。

轉折

今天,我看了另一篇文章,很基礎,連接在這裏:很基礎的知識

於是,我有了新的想法:

1,在全局配置文件setting.xml,只配置一個中央倉庫的鏡像,即mirrorOf為central的鏡像只配置一個

2、在具體項目的pom.xml文件裏配置特殊的倉庫

忙裏偷閑,實驗一下,成功了!

這才是很符合邏輯的配置呀,是不是覺得這樣的配置很舒服。

全局配置裏就應該只配置一個中央倉庫,其他的個別倉庫也不應該往全局配置裏配,所以不用在糾結mirrorOf的配置語義了!就一個central,簡單明了!

終極解決方案:

同學提示我應該搭建自己的私服!這是另一個研究方向,日後再說!

我先說我的大招(我憋了很久了):

1、在全局配置文件setting.xml配置一個central倉庫的鏡像。

2、在具體項目的pom裏配置個別的倉庫,如下

[html] view plain copy
  1. <repositories>
  2. <repository>
  3. <id>奇葩倉庫</id>
  4. <url>https://奇葩倉庫/public/</url>
  5. </repository>
  6. </repositories>

大招下載頁面,maven配置文件 和 pom配置文件

maven配置多倉庫鏡像(轉)