Maven配置 settings.xml

本地倉庫是遠程倉庫的一個緩衝和子集,當你構建Maven項目的時候,首先會從本地倉庫查找資源,若是沒有,那麼Maven會從遠程倉庫下載到你本地倉庫。這樣在你下次使用的時候就不須要從遠程下載了。若是你所須要的jar包版本在本地倉庫沒有,並且也不存在於遠程倉庫,Maven在構建的時候會報錯,這種狀況可能發生在有些jar包的新版本沒有在Maven倉庫中及時更新。java

Maven缺省的本地倉庫地址爲${user.home}/.m2/repository 。也就是說,一個用戶會對應的擁有一個本地倉庫。固然你能夠經過修改${user.home}/.m2/settings.xml 配置這個地址:apache

Xml代碼maven

  1. <settings>   工具

  2.   …   url

  3.   <localRepository> D:/java/repository</localRepository>   spa

  4.   …   .net

  5. </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>
相關文章
相關標籤/搜索