settings.xml詳解

#介紹# ##概述##   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中使用如下表達式來代替內容:安全

  1. ${user.home}和全部其餘系統屬性(自Maven 3.0)
  2. ${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。默認值爲 falseNote 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.pluginsorg.codehaus.mojossh

<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>
  • id:Maven嘗試鏈接的倉庫/鏡像服務器的id,而不是用戶所登陸的服務器id。
  • username, password:服務器進行身份驗證所需的登陸名和密碼。
  • privateKey, passphrase::(可選)與前兩個元素相似,這兩項指定私鑰的路徑(默認${user.home}/.ssh/id_dsa)和passphrasepassphrasepassword 元素未來可能外化,但目前它們必須以純文本形式配置在settings.xml文件中 。
  • filePermissions, directoryPermissions::倉庫部署時建立的文件或目錄的訪問權限。這兩個元素的合法值是一個三位數字,對應了unix文件系統的權限,如664,或775。

請注意:若是使用私鑰登陸服務器,請確保沒有配置<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>
  • id, name::此鏡像的惟一標識符和用戶友好名稱。id用於區分 <mirror /> 元素,並在鏈接到鏡像時從<servers />部分選擇相應的驗證信息。
  • url: 此鏡像的URL 。構建系統將使用此URL鏈接到倉庫,而不是原始倉庫URL。
  • mirrorOf::此鏡像所鏡像的倉庫id。例如,指向Maven中央倉庫central repository(https://repo.maven.apache.org/maven2/)的一個鏡像,將此元素設置爲 central。更高級的映射,如 repo1,repo2or *,! 也是能夠的.,但不能與<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>
  ...
  • id:T此代理的惟一標識符,用於區分<proxy />元素。
  • active:true,此代理激活。 當咱們聲明瞭一組代理,而某個時刻只須要某一代理激活時用到。
  • protocol, host, port: 此代理的protocol://host:port
  • username, password: 代理服務器進行身份驗證所需的登陸名和密碼。
  • nonProxyHosts:設置不該該被代理的主機列表,列表的分隔符是代理服務器的預期類型,上面的例子是管道分隔符,常見的還有逗號分隔符。

##<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:<jdk />元素中有一個內置的以Java爲中心的檢查,當檢測到匹配的jdk運行環境,profile被激活,上面的例子中,將匹配 JDK1.5.0_06。
  • os:<os />元素能夠定義如上所示的一些操做系統特定屬性。
  • property:若是Maven檢測到POM中定義name屬性,且值爲此<value />元素值,則此profile 將被激活。
  • file::當給存在而且丟失指定文件名文件,則此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文件中使用:

  1. env.X:使用「env.」前綴變量將返回shell環境變量,例如,${env.PATH}包含 \$path環境變量(Windows中爲%PATH%).
  2. project.x:點(.)指示POM中對應值的路徑。例如經過${project.version}訪問<project><version>1.0</version></project>值。
  3. settings.x:點(.)指示settings.xml中對應值的路徑。例如經過${settings.offline}訪問<settings><offline>false</offline></settings>值。
  4. Java System Properties:全部經過java.lang.System.getProperties()得到的屬性都可用做POM屬性。例如${java.home}
  5. x:設置在<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:設置releases或snapshots版本的artifact的下載策略。使用<releases/><snapshots />,POM可以在單個倉庫中獨立於其餘類型更改每一個類型的artifact的下載策略。例如,可能用於開發決定,僅啓用快照下載。
  • enabled:truefalse,表示是否爲相應類型啓用此倉庫。
  • updatePolicy:此元素指定更新發生的頻率,Maven將本地POM的時間戳(存儲與倉庫的maven元數據文件中)與遠程進行比較,可選的設置值有alwaysdaily(默認)、interval:X(X是一分鐘爲單位的整數)和never
  • checksumPolicy:當Maven將文件部署到倉庫時,它還會驗證相應的校驗文件,<checksumPolicy />配置校驗缺失或者不正確時的處理方式,有ignorefailwarn三個選項值。
  • layout:在上述對倉庫的描述中,提到它們都遵循共同的佈局,使用此元素來指定是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

相關文章
相關標籤/搜索