Maven settings配置中的mirrorOf
from : http://blog.csdn.net/isea533/article/details/21560089
使用maven時,從來沒仔細注意過setting配置節點的作用,直到今天配置總是不起作用,總是報錯才開始去認識這些節點的含義。
這裡就說mirrorOf,因為其他的怎麼配置基本上都不會出錯,只有mirrorOf會導致莫名其妙的錯誤,如果你還不瞭解mirrorOf,請往下看,你會認識到mirrorOf的重要作用的。
主要參考來自:
如果你英文很不錯,你可以去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的內容說完了,記錄下我解決問題的思路和原因以及解決辦法,希望對你有所幫助。