#介紹# ##概述## settings.xml文件中的<settings />
包含一系列用於配置Maven執行方式的元素,如本地倉庫位置、遠程倉庫服務器和身份驗證信息等,相似pom.xml,但不捆綁到任何特定項目,或分發給受衆。html
settings.xml文件通常位於如下兩個位置:java
${maven.home}/conf/settings.xml
${user.home}/.m2/settings.xml
(沒有改變settings.xml中本地倉庫位置狀況下此目錄)前面位置的settings.xml文件爲全局配置文件,後面的爲用戶配置文件。若是兩個配置文件都存在,則以用戶配置文件爲主合併其內容。shell
提示:若是你須要新建立用戶配置文件,最簡單的方法是將Maven安裝目錄的全局settings.xml複製到${user.home}/.m2目錄下。Maven的默認settings.xml是一個包含註釋和示例的模板,所以你能夠經過調整它以快速知足需求。express
如下是<settings />
下的頂級元素:apache
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository/> <interactiveMode/> <usePluginRegistry/> <offline/> <pluginGroups/> <servers/> <mirrors/> <proxies/> <profiles/> <activeProfiles/> </settings>
能夠在settings.xml中使用如下表達式來代替內容:安全
${user.home}
和全部其餘系統屬性(自Maven 3.0)${env.HOME}
等環境變量 請注意,settings.xml文件中<profiles>
元素中定義的properties不能用於${expression}。 #詳細配置# ##簡單值(單值)元素## 一半的頂級配置元素值在構建系統運行期間都是簡單值。服務器
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>${user.home}/.m2/repository</localRepository> <interactiveMode>true</interactiveMode> <usePluginRegistry>false</usePluginRegistry> <offline>false</offline> ... </settings>
<localRepository />
:配置系統本地倉庫的路徑。默認值是${user.home}/.m2/repository
目錄。此元素特用於容許全部已登陸到主服務器的用戶共用公共本地倉庫。<interactiveMode />
:true
,Maven嘗試與用戶交互,需用戶輸入,不然設置爲false
,默認爲 true
。<usePluginRegistry />
:true
,Maven使用 ${user.home}/.m2/plugin-registry.xml
來管理插件版本, 不然false
。默認值爲 false
。Note that for the current version of Maven 2.0, the plugin-registry.xml file should not be depended upon. Consider it dormant for now.(這句話暫時不知如何翻譯出來穩當,畢竟已經到Maven 3.x時代)<offline />
:true
, 構建系統在離線模式運行,不然false
。默認值爲false
。此元素對於因網絡設置或安全緣由而沒法鏈接到遠程倉庫的服務器很是有用。##<pluginGroups />##網絡
此元素包含一組<pluginGroup />
元素,每一個<pluginGroup />
都包含一個groupId,當你使用插件而且在命令行中未提供groupId時,查詢此列表。列表自動包含org.apache.maven.plugins
和org.codehaus.mojo
。ssh
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups> ... </settings>
例如,給定上述設置,在Maven命令行可以使用短命令mvn jetty:run
執行org.mortbay.jetty:jetty-maven-plugin:run
命令。maven
##<servers />##
POM文件中 <repositories />
和<distributionManagement />
元素配置用於下載和發佈的倉庫。安全考慮,某些配置如用戶名和密碼,不該在pom.xml中設置,這種類型的信息應該存在於構建服務器上的settings.xml文件中。
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <servers> <server> <id>server001</id> <username>my_login</username> <password>my_password</password> <privateKey>${user.home}/.ssh/id_dsa</privateKey> <passphrase>some_passphrase</passphrase> <filePermissions>664</filePermissions> <directoryPermissions>775</directoryPermissions> <configuration></configuration> </server> </servers> ... </settings>
${user.home}/.ssh/id_dsa
)和passphrase
。 passphrase
和 password
元素未來可能外化,但目前它們必須以純文本形式配置在settings.xml文件中 。請注意:若是使用私鑰登陸服務器,請確保沒有配置<password />
元素值,不然,密鑰將被忽略。
##<mirrors />##
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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <mirrors> <mirror> <id>planetmirror.com</id> <name>PlanetMirror Australia</name> <url>http://downloads.planetmirror.com/pub/maven2</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> ... </settings>
<mirror />
元素,並在鏈接到鏡像時從<servers />
部分選擇相應的驗證信息。central repository(https://repo.maven.apache.org/maven2/)
的一個鏡像,將此元素設置爲 central
。更高級的映射,如 repo1,repo2
or *,!
也是能夠的.,但不能與<mirror />
的id相同。想更深刻的瞭解鏡像,請閱讀Guide to Mirror Settings。
##<proxies />##
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <proxies> <proxy> <id>myproxy</id> <active>true</active> <protocol>http</protocol> <host>proxy.somewhere.com</host> <port>8080</port> <username>proxyuser</username> <password>somepassword</password> <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts> </proxy> </proxies> ...
<proxy />
元素。true
,此代理激活。 當咱們聲明瞭一組代理,而某個時刻只須要某一代理激活時用到。protocol://host:port
。##<profiles />##
settings.xml中的<profile>
元素是pom.xml中<profile>
元素的截斷版本。由<activation />
、<properties />
、<repositories />
、<pluginRepositories />
元素組成。<profile>
元素只包含這四個元素,由於它們做爲整個構建系統的一部分,而不是單個項目對象模型的配置。 若是profile在settings.xml處於活動狀態,則其值將覆蓋在POM或profiles.xml文件中任id相等的profile配置。
###<activation />###
<activation />
是profile的關鍵,像POM的profiles同樣,profile的強大在於它僅在特定狀況下修改某些值的能力,這些特定狀況是經過<activation />
指定的。
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <profiles> <profile> <id>test</id> <activation> <activeByDefault>false</activeByDefault> <jdk>1.5</jdk> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> <property> <name>mavenVersion</name> <value>2.0.3</value> </property> <file> <exists>${basedir}/file2.properties</exists> <missing>${basedir}/file1.properties</missing> </file> </activation> ... </profile> </profiles> ... </settings>
profile在知足全部指定的條件時激活。儘管這些條件不必定一會兒都能知足。
<jdk />
元素中有一個內置的以Java爲中心的檢查,當檢測到匹配的jdk運行環境,profile被激活,上面的例子中,將匹配 JDK1.5.0_06。<os />
元素能夠定義如上所示的一些操做系統特定屬性。<value />
元素值,則此profile 將被激活。 <activation />
元素並非激活profile的惟一方式,settings.xml文件中<activeProfile />元素能夠指定將被激活的profile id,profile也能夠經過在命令行,使用-P標記後跟逗號分隔的列表來顯式激活(如,-P test)。
想要查看哪一個profile處於激活狀態,使用maven-help-plugin
。
mvn help:active-profiles
###<properties />###
Maven中的<properties />
是值佔位符,相似於Ant中的<property />
,經過${X}
在POM文件中的任何地方能夠訪問它們的值(X爲屬性)。
它們有五種不一樣的形式,均可以在settings.xml文件中使用:
${env.PATH}
包含 \$path
環境變量(Windows中爲%PATH%
).${project.version}
訪問<project><version>1.0</version></project>
值。${settings.offline}
訪問<settings><offline>false</offline></settings>
值。java.lang.System.getProperties()
得到的屬性都可用做POM屬性。例如${java.home}
。<properties />
元素或外部文件中的屬性,經過${someVar}
使用。 以下,若是此profile處於激活狀態,可從POM中訪問${user.install}
屬性值。
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <profiles> <profile> ... <properties> <user.install>${user.home}/our-project</user.install> </properties> ... </profile> </profiles> ... </settings>
###<repositories />###
遠程倉庫是遠程項目集合,Maven使用這些項目來裝填構建系統的本地倉庫,Maven稱之爲插件和依賴。不一樣的遠程倉庫可能包含不一樣的項目,處於激活狀態下的profile,會搜索匹配的release或snapshot版本構件。
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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <profiles> <profile> ... <repositories> <repository> <id>codehausSnapshots</id> <name>Codehaus Snapshots</name> <releases> <enabled>false</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> <url>http://snapshots.maven.codehaus.org/maven2</url> <layout>default</layout> </repository> </repositories> <pluginRepositories> ... </pluginRepositories> ... </profile> </profiles> ... </settings>
<releases/>
和<snapshots />
,POM可以在單個倉庫中獨立於其餘類型更改每一個類型的artifact的下載策略。例如,可能用於開發決定,僅啓用快照下載。true
或false
,表示是否爲相應類型啓用此倉庫。always
、daily
(默認)、interval:X
(X是一分鐘爲單位的整數)和never
。<checksumPolicy />
配置校驗缺失或者不正確時的處理方式,有ignore
、fail
、warn
三個選項值。default
仍是legacy
。###<pluginRepositories />###
倉庫存儲兩種主要類型的構件,一種是用做其餘構件依賴項的組件,中央倉庫的大多數構件屬於這種類型。 另外一種構件類型是插件, Maven插件是一種特殊類型的構件,所以插件倉庫可能獨立於其餘倉庫。 <pluginRepositories />
元素的結構相似於<repositories />
元素, 每一個<pluginRepository />
元素指定了Maven能夠查找到新插件的遠程地址。
<a id="activeProfiles"></a>
##<activeProfiles />##
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <activeProfiles> <activeProfile>env-test</activeProfile> </activeProfiles> </settings>
settings.xml中的最後一塊是<activeProfiles />
元素,它包含一組<activeProfile />
元素,每一個<activeProfile />
元素都包含一個profile id。任何在<activeProfile />
元素中設置的profile id所對應的profile將處於激活狀態,無論環境設置如何。 若是沒有找到匹配的profile,將不產生任何效果。例如,<activeProfile />
設置profile id爲env-test
,則pom.xml或profile.xml文件中設置id爲env-test
的profile將激活,若是沒有匹配的profile,則繼續正常執行。
原網址連接Settings Reference