Maven settings配置中的mirrorOf

使用maven時,從來沒仔細注意過setting配置節點的作用,直到今天配置總是不起作用,總是報錯纔開始去認識這些節點的含義。


這裏就說mirrorOf,因爲其他的怎麼配置基本上都不會出錯,只有mirrorOf會導致莫名其妙的錯誤,如果你還不瞭解mirrorOf,請往下看,你會認識到mirrorOf的重要作用的。


主要參考來自:

Using Mirrors for Repositories

如果你英文很不錯,你可以去maven官方查看上面的介紹,上面的介紹主要說明了mirrorOf的用法和作用。


或者在這裏繼續看下去:

先說mirrors中mirror的作用,mirrors允許配置多個鏡像mirror,mirror的作用一般是爲了使用一個更快速度的鏡像,主要是訪問速度的考慮,或者突破屏蔽使用可以訪問的鏡像。


在maven中不配置mirror時使用的maven的中央庫。


在maven中配置一個mirror時,mirror通常會設置成*,還有可能是一個具體的值,還有可能是逗號隔開的幾個值..

例如:

1.*

2.repo3

3.repo1,repo2,*,!repo3

4.external:*

在上面4個例子中,第一個例子中*的意思就是(根據mirrorOf和repository的id)匹配所有的庫(repository),這樣就是說如果你需要某個jar,他會從鏡像地址去下載這個jar。不管你配置了多少個庫,即使這些庫的地址不一樣,仍然會從鏡像地址訪問,這裏就產生了問題。

問題:爲什麼我配置好了庫(repository),但是下載不下來(或者下載地址不對)?

這個問題已經很明白了,就是鏡像(mirror)的問題。

問題:如何解決上述問題呢?

這裏請繼續看第二個例子和第三個例子。


第二個例子只配置了一個repo3,這個鏡像只能匹配id是repo3的庫,該庫會使用repo3的鏡像訪問。這裏說重點了,即使存在一個*的,這裏會先查找完全相同的存儲庫標識符匹配的鏡像,如果找到了,就用匹配的,這裏就是repo3,這點可以放心。如果找不到,那就去根據其他的mirrorOf查找去,查找到一個就使用。這裏需要注意的是,如果存在多個重複的mirrorOf,只會用排名靠前的第一個(按照配置順序來)。如果一個都沒有,就會用maven中央庫。


第三個例子是用逗號隔開的好幾個,並且有一個特殊的!repo3,一般!的意思是非,這裏的意思就是,就是排除repo3的情況。綜合起來第三個的含義就是完全匹配repo1,repo2和其他全部庫,排除repo3庫。


到這裏,第二個問題已經有了答案,給這個庫配置單獨的鏡像,而且位置儘量在前面,id和mirrorOf一致。說到這兩個一致,還得說兩個不能一致的情況,就是mirror的mirrorOf不能和任何mirror的id一致,因爲id在setting中唯一,mirrorOf要和庫的id一致,所以勢必不能和mirror的id一致,如果一致顯然就起不到作用了(這裏屬於猜測,官方要求不能一致)。


第四個例子很特殊,含義就是匹配本地庫之外的全部庫。如果本地庫存在,就用本地庫的。


到這裏,有關mirrorOf的內容說完了,記錄下我解決問題的思路和原因以及解決辦法,希望對你有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章