使用maven時,歷來沒仔細注意過setting配置節點的做用,直到今天配置老是不起做用,老是報錯纔開始去認識這些節點的含義。 html
這裏就說mirrorOf,由於其餘的怎麼配置基本上都不會出錯,只有mirrorOf會致使莫名其妙的錯誤,若是你還不瞭解mirrorOf,請往下看,你會認識到mirrorOf的重要做用的。 apache
主要參考來自: maven
Using Mirrors for Repositories ide
若是你英文很不錯,你能夠去maven官方查看上面的介紹,上面的介紹主要說明了mirrorOf的用法和做用。 ui
或者在這裏繼續看下去: spa
先說mirrors中mirror的做用,mirrors容許配置多個鏡像mirror,mirror的做用通常是爲了使用一個更快速度的鏡像,主要是訪問速度的考慮,或者突破屏蔽使用能夠訪問的鏡像。 htm
在maven中不配置mirror時使用的maven的中央庫。 get
在maven中配置一個mirror時,mirror一般會設置成*,還有多是一個具體的值,還有多是逗號隔開的幾個值.. it
例如: gui
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的內容說完了。
記錄下我解決問題的思路和緣由以及解決辦法,但願對你有所幫助。