maven學習7 settings.xml解析
maven的配置文件settings.xml存在於兩個地方:
1.安裝的地方:${M2_HOME}/conf/settings.xml
2.用戶的目錄:${user.home}/.m2/settings.xml
前者又被叫做全局配置,對操作系統的所有使用者生效;後者被稱為用戶配置,只對當前操作系統的使用者生效。如果兩者都存在,它們的內容將被合並,並且用戶範圍的settings.xml會覆蓋全局的settings.xml。
Maven安裝後,用戶目錄下不會自動生成settings.xml,只有全局配置文件。如果需要創建用戶範圍的settings.xml,可以將安裝路徑下的settings復制到目錄${user.home}/.m2/。Maven默認的settings.xml是一個包含了註釋和例子的模板,可以快速的修改它來達到你的要求。
全局配置一旦更改,所有的用戶都會受到影響,而且如果maven進行升級,所有的配置都會被清除,所以要提前復制和備份${M2_HOME}/conf/settings.xml文件,一般情況下不推薦配置全局的settings.xml。
settings.xml中主要包括以下元素:
localRepository:表示Maven用來在本地儲存信息的本地倉庫的目錄。默認是用戶家目錄下面的.m2/repository目錄。
interactiveMode:表示是否使用交互模式,默認是true;如果設為false,那麽當Maven需要用戶進行輸入的時候,它會使用一個默認值。
offline:表示是否離線,默認是false。這個屬性表示在Maven進行項目編譯和部署等操作時是否允許Maven進行聯網來下載所需要的信息。
proxies:其下面可以定義一系列的proxy子元素,表示Maven在進行聯網時需要使用到的代理。當設置了多個代理的時候第一個標記active為true的代理將會被使用。
在特殊的網絡策略環境下,可能要需要開發人員通過代理服務器來訪問互聯網。此時就需要給Maven配置代理服務來訪問倉庫、更新相關資源。
<proxies> <proxy> <id>xxx</id> <active>true</active> //表示當前代理是否生效 <protocol>http</protocol> <username>用戶名</username> <password>密碼</password> <host>代理服務器地址</host> <port>代理服務器的端口</port> <nonProxyHosts>不使用代理的主機</nonProxyHosts> </proxy> </proxies>
servers:其下面可以定義一系列的server子元素,表示當需要連接到一個遠程服務器的時候需要使用到的驗證方式。這主要有username/password和privateKey/passphrase這兩種方式
mirrors:用於定義一系列的遠程倉庫的鏡像。我們可以在pom中定義一個下載工件的時候所使用的遠程倉庫。但是有時候這個遠程倉庫會比較忙,所以這個時候人們就想著給它創建鏡像以緩解遠程倉庫的壓力,也就是說會把對遠程倉庫的請求轉換到對其鏡像地址的請求。每個遠程倉庫都會有一個id,這樣我們就可以創建自己的mirror來關聯到該倉庫,那麽以後需要從遠程倉庫下載工件的時候Maven就可以從我們定義好的mirror站點來下載,這可以很好的緩解我們遠程倉庫的壓力。在我們定義的mirror中每個遠程倉庫都只能有一個mirror與它關聯,也就是說你不能同時配置多個mirror的mirrorOf指向同一個repositoryId。
profiles:用於指定一系列的profile.
Maven倉庫主要有2種:
-
remote repository:相當於公共的倉庫,大家都能訪問到,一般可以用URL的形式訪問
-
local repository:存放在本地磁盤的一個文件夾,例如,windows上默認是C:\Users\{用戶名}\.m2\repository目錄
Remote Repository主要有3種:
-
中央倉庫:http://repo1.maven.org/maven2/
-
私服:內網自建的maven repository,其URL是一個內部網址
-
其他公共倉庫:其他可以互聯網公共訪問maven repository,例如 jboss repository等
repository裏存放的都是各種jar包和maven插件。當向倉庫請求插件或依賴的時候,會先檢查local repository,如果local repository有則直接返回,否則會向remote repository請求,並緩存到local repository。也可以把做的東西放到本地倉庫,僅供本地使用;或上傳到遠程倉庫,供大家使用。
Mirror
mirror相當於一個攔截器,它會攔截maven對remote repository的相關請求,把請求裏的remote repository地址,重定向到mirror裏配置的地址。
需要註意的是,由於鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構件。
私服
私服是一種特殊的遠程Maven倉庫,它是架設在局域網內的倉庫服務,私服一般被配置為互聯網遠程倉庫的鏡像,供局域網內的Maven用戶使用。
當Maven需要下載構件的時候,先向私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,同時緩存在私服之上,然後為Maven下載請求提供下載服務,另外,對於自定義或第三方的jar可以從本地上傳到私服,供局域網內其他maven用戶使用。
在<repositories>元素下,可以使用 <repository>子元素聲明一個或者多個遠程倉庫。
maven學習7 settings.xml解析