本地倉庫是遠程倉庫的一個緩衝和子集,當你構建Maven項目的時候,首先會從本地倉庫查找資源,若是沒有,那麼Maven會從遠程倉庫下載到你本地倉庫。這樣在你下次使用的時候就不須要從遠程下載了。若是你所須要的jar包版本在本地倉庫沒有,並且也不存在於遠程倉庫,Maven在構建的時候會報錯,這種狀況可能發生在有些jar包的新版本沒有在Maven倉庫中及時更新。java
Maven缺省的本地倉庫地址爲${user.home}/.m2/repository 。也就是說,一個用戶會對應的擁有一個本地倉庫。固然你能夠經過修改${user.home}/.m2/settings.xml 配置這個地址:apache
Xml代碼maven
<settings> 工具
… url
<localRepository> D:/java/repository</localRepository> spa
… .net
</settings> 代理
若是你想讓全部的用戶使用統一的配置那麼你能夠修改Maven主目錄下的setting.xml:code
${M2_HOME}/conf/setting.xmlserver
repository是指在局域網內部搭建的repository,它跟central repository, jboss repository等的區別僅僅在於其URL是一個內部網址
mirror則至關於一個代理,它會攔截去指定的遠程repository下載構件的請求,而後從本身這裏找出構件回送給客戶端。配置mirror的目的通常是出於網速考慮。
不過,不少internal repository搭建工具每每也提供mirror服務,好比Nexus就可讓同一個URL,既用做internal repository,又使它成爲全部repository的mirror。
高級的鏡像配置:
1.<mirrorOf>*</mirrorOf>
匹配全部遠程倉庫。 這樣全部pom中定義的倉庫都不生效
2.<mirrorOf>external:*</mirrorOf>
匹配全部遠程倉庫,使用localhost的除外,使用file://協議的除外。也就是說,匹配全部不在本機上的遠程倉庫。
3.<mirrorOf>repo1,repo2</mirrorOf>
匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫。
4.<mirrorOf>*,!repo1</miiroOf>
匹配全部遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。
mirrors能夠配置多個mirror,每一個mirror有id,name,url,mirrorOf屬性,id是惟一標識一個mirror就很少說了,name貌似沒多大用,至關於描述,url是官方的庫地址,mirrorOf表明了一個鏡像的替代位置,例如central就表示代替官方的中央庫。
我本覺得鏡像庫是一個分庫的概念,就是說當a.jar在第一個mirror中不存在的時候,maven會去第二個mirror中查詢下載。但事實卻不是這樣,當第一個mirror中不存在a.jar的時候,並不會去第二個mirror中查找,甚至於,maven根本不會去其餘的mirror地址查詢。
後來終於知道,maven的mirror是鏡像,而不是「分庫」,只有當前一個mirror沒法鏈接的時候,纔會去找後一個,相似於備份和容災。
還有,mirror也不是按settings.xml中寫的那樣的順序來查詢的。
所謂的第一個並不必定是最上面的那個。
當有id爲B,A,C的順序的mirror在mirrors節點中,maven會根據字母排序來指定第一個,因此無論怎麼排列,必定會找到A這個mirror來進行查找,當A沒法鏈接,出現意外的狀況下,纔會去B查詢。
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>repo-iss</id> <username>deployment</username> <password>deployment123</password> </server> </servers> <mirrors> <!-- osc鏡像 --> <mirror> <!-- 鏡像全部遠程倉庫,但不包括指定的倉庫 --> <id>mirror-osc</id> <mirrorOf>external:*,!repo-osc-thirdparty,!repo-iss</mirrorOf> <url>http://maven.oschina.net/content/groups/public/</url> </mirror> <!-- <mirror> <id>mirror-iss</id> <mirrorOf>external:*</mirrorOf> <url>http://10.24.16.99:5555/nexus/content/groups/public/</url> </mirror> --> </mirrors> <profiles> <profile> <id>profile-default</id> <repositories> <repository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>repo-osc-thirdparty</id> <url>http://maven.oschina.net/content/repositories/thirdparty/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <id>profile-iss</id> <repositories> <repository> <id>repo-iss</id> <url>http://10.24.16.99:5555/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>repo-iss</id> <url>http://10.24.16.99:5555/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>profile-default</activeProfile> <!--<activeProfile>profile-iss</activeProfile>--> </activeProfiles> <!-- <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>10.10.204.160</host> <port>80</port> </proxy> </proxies> --> </settings>