1. 程式人生 > >maven配置檔案setting.xml欄位註釋

maven配置檔案setting.xml欄位註釋

maven的配置檔案為settings.xml,在下面路徑中可以找到這個檔案,分別為:
  • $M2_HOME/conf/settings.xml:全域性設定,在maven的安裝目錄下;
  • ${user.home}/.m2/settings.xml:使用者設定,需要使用者手動新增,可以將安裝目錄下的settings.xml檔案拷貝過來修改;

兩個檔案的關係為:如果兩個檔案同時存在,檔案內容將被融合,相同設定將以使用者設定的settings.xml為準。

settings.xml檔案一共有10個配置項,檔案結構為:

  1. <settingsxmlns="http://maven.apache.org/SETTINGS/1.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  4. http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <localRepository/>
  6. <interactiveMode/>
  7. <usePluginRegistry/>
  8. <offline/>
  9. <pluginGroups/>
  10. <servers/>
  11. <mirrors/>
  12. <proxies/>
  13. <profiles/>
  14. <activeProfiles/>
  15. </settings>
下面對每一個配置項做一個簡要的講解,幫助理解每一項的含義和配置方式,以便後面做更深入的學習。


簡單屬性

  1. <settingsxmlns="http://maven.apache.org/SETTINGS/1.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  4. http://maven.apache.org/xsd/settings-1.0.0.xsd"
    >
  5. <localRepository>${user.home}/.m2/repository</localRepository>
  6. <interactiveMode>true</interactiveMode>
  7. <usePluginRegistry>false</usePluginRegistry>
  8. <offline>false</offline>
  9. ...
  10. </settings>
  • localRepository:本地倉庫路徑,預設值 ${user.home}/.m2/repository;
  • interactiveMode:值為true/false,true表示mave可以使用使用者輸入,預設true;
  • usePluginRegistry:值為true/false,true表示maven使用${user.home}/.m2/plugin-registry.xml管理外掛版本,預設為false;
  • offline:值為true/false,true表示構建系統在離線模式下執行,預設為false;


pluginGroups

每個pluginGroup元素都包含一個groupId,當你在命令列中沒有提供外掛的groupid時,將會使用該列表。這個列表自動包含org.apache.maven.plugins和org.codehaus.mojo。

  1. <pluginGroups>
  2. <pluginGroup>org.mortbay.jetty</pluginGroup>
  3. </pluginGroups>


servers

POM中的repositories和distributionManagement元素為下載和部署定義的倉庫。一些設定如伺服器的使用者名稱和密碼不應該和pom.xml一起分發。這種型別的資訊應該存在於構建伺服器上的settings.xml檔案中。
  1. <servers>
  2. <server>
  3. <id>server001</id>
  4. <username>my_login</username>
  5. <password>my_password</password>
  6. <privateKey>${user.home}/.ssh/id_dsa</privateKey>
  7. <passphrase>some_passphrase</passphrase>
  8. <filePermissions>664</filePermissions>
  9. <directoryPermissions>775</directoryPermissions>
  10. <configuration></configuration>
  11. </server>
  12. </servers>
  • id:伺服器的id,和repository/mirror中配置的id項匹配;
  • username,password:伺服器的認證資訊;
  • privateKey,passphrase:指定一個路徑到一個私有key(預設為${user.home}/.ssh/id_dsa)和一個passphrase;
  • filePermissions,directoryPermissions:設定檔案和資料夾訪問許可權,對應unix檔案許可權值,如:664,後者775.
注意:如果你使用一個已有key登入伺服器,你必須忽略<password>項,否則,key將會被忽略。

Mirrors

  1. <mirrors>
  2. <mirror>
  3. <id>planetmirror.com</id>
  4. <name>PlanetMirror Australia</name>
  5. <url>http://downloads.planetmirror.com/pub/maven2</url>
  6. <mirrorOf>central</mirrorOf>
  7. </mirror>
  8. </mirrors>
  • id,name:映象的唯一標識和使用者友好的名稱;
  • url:映象的url,用於代替原始倉庫的url;
  • mirrorof:使用映象的倉庫的id,可以使用下面匹配屬性:
    ------*:匹配所有倉庫id;
    ------external:*:匹配所有倉庫id,除了那些使用localhost或者基於倉庫的檔案的倉庫;
    ------多個倉庫id之間用逗號分隔;
    ------!repol:表示匹配所有倉庫,除了repol;
    注意:如果配置了多個倉庫,首先匹配id精確匹配的映象,否則maven使用第一個匹配的映象。


proxies

代理伺服器設定

  1. <proxy>
  2. <id>optional</id>
  3. <active>true</active>
  4. <protocol>http</protocol>
  5. <username>proxyuser</username>
  6. <password>proxypass</password>
  7. <host>proxy.host.net</host>
  8. <port>80</port>
  9. <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
  10. </proxy>
  • id:可選,為代理伺服器設定一個名稱;
  • active:true/false,預設true;
  • protocol:代理伺服器使用的協議型別;
  • username:使用者名稱;
  • password:密碼;
  • host:主機名,或者ip;
  • port:埠號;
  • nonProxyHosts:不使用代理伺服器的主機型別,多個主機之間用'|'分隔,可使用萬用字元,如:*.somewhere.com。

profiles

這裡的profile元素是pom.xml的profile元素的一個裁剪版本,它包含activation、repositories、pluginRepositories和properties元素。如果一個在settins中的profile是啟用的,它的值將覆蓋在一個POM或者profiles.xml檔案中的任何相同id的profiles。

  • Activation
    通過Activation來指定profile生效的環境,具體見下:
    1. <profiles>
    2. <profile>
    3. <id>test</id>
    4. <activation>
    5. <activeByDefault>false</activeByDefault>
    6. <jdk>1.5</jdk>
    7. <os>
    8. <name>Windows XP</name>
    9. <family>Windows</family>
    10. <arch>x86</arch>
    11. <version>5.1.2600</version>
    12. </os>
    13. <property>
    14. <name>mavenVersion</name>
    15. <value>2.0.3</value>
    16. </property>
    17. <file>
    18. <exists>${basedir}/file2.properties</exists>
    19. <missing>${basedir}/file1.properties</missing>
    20. </file>
    21. </activation>
    22. ...
    23. </profile>
    24. </profiles>
    • activeByDefault:是否自動啟用;
    • jdk:jdk版本,必須達到該版本後才能執行啟用;
    • os:作業系統環境資訊;
    • property:當maven探測到一個name=value值對時,profile才被啟用;
    • file:檔案exists或者missing可以啟用該profile。
  • Properties
    properties中的值可以在一個POM中通過${x}來使用,x比哦是一個property,以下形式在settiongs.xml檔案中都可以使用:

    • --env.X;表示使用一個環境變數,如:${env.PATH}表示使用PATH環境變數;
    • --project.x:標識在POM中的對應元素的值,如:<project><version>1.0</version></project>可以通過${project.version}引用;
    • --settings.x:在settins.xml中包含的對應元素的值,如:<settings><offline>false</offline></settings>可以通過${settings.offline}引用;
    • --Java System Properties:所有java.lang.System.getProperties()獲取的屬性都是可用的,如:${java.home};
    • --x:在<properties/> 中或者一個擴充套件檔案中設定的屬性,如:${someVar};
    配置方式為:
    1. <profiles>
    2. <profile>
    3. ...
    4. <properties>
    5. <user.install>${user.home}/our-project</user.install>
    6. </properties>
    7. ...
    8. </profile>
    9. </profiles>
    屬性${user.install}就可以在POM中使用了。
  • Repositories
    倉庫。倉庫是Maven用來填充構建系統本地倉庫所使用的一組遠端專案。而Maven是從本地倉庫中使用其外掛和依賴。不同的遠端倉庫可能含有不同的專案,而在某個啟用的profile下,可能定義了一些倉庫來搜尋需要的釋出版或快照版構件。
    1. <repositories>
    2. <repository>
    3. <id>codehausSnapshots</id>
    4. <name>Codehaus Snapshots</name>
    5. <releases>
    6. <enabled>false</enabled>
    7. <updatePolicy>always</updatePolicy>
    8. <checksumPolicy>warn</checksumPolicy>
    9. </releases>
    10. <snapshots>
    11. <enabled>true</enabled>
    12. <updatePolicy>never</updatePolicy>
    13. <checksumPolicy>fail</checksumPolicy>
    14. </snapshots>
    15. <url>http://snapshots.maven.codehaus.org/maven2</url>
    16. <layout>default</layout>
    17. </repository>
    18. </repositories>
    • releases、snapshots:不同的版本策略,對應釋出版本和快照版本;
    • enabled:true/false,對應型別是否啟用;
    • updatePolicy:更新策略,maven將比較本地POM的時間戳(儲存在倉庫的maven-metadata檔案中)和遠端的,配置選項可以設定:always、daily(一天一次,預設),interval:x(x為一整數,單位分鐘),never;
    • checksumPolicy:maven部署檔案到倉庫時,也會部署對應的校驗和檔案,你可以設定:ignore,fail或者warn用於當校驗和檔案不存在或者檢驗失敗時的處理策略;
    • layout:上面提到的倉庫大部分都遵循共同的佈局,可以配置:default(預設)或者legacy(遺留);
  • pluginRepositories
    外掛倉庫。倉庫是兩種主要構件的家。第一種構件被用作其它構件的依賴。這是中央倉庫中儲存大部分構件型別。另外一種構件型別是外掛。Maven外掛是一種特殊型別的構件。由於這個原因,外掛倉庫獨立於其它倉庫。pluginRepositories元素的結構和repositories元素的結構類似。每個pluginRepository元素指定一個Maven可以用來尋找新外掛的遠端地址。
  • activeProfiles

    1. <activeProfiles>
    2. <activeProfile>env-test</activeProfile>
    3. </activeProfiles>
    activeProfile中間定義activeProfile的id,在這裡定義的activeProfile總是被啟用,不關心環境設定,如果配置的id的profile沒有發現,將沒有任何事發生。