本文是對(duì)https://maven.apache.org/settings.html的翻譯和總結(jié)
介紹
快速概覽
settings文件是一個(gè)全局的配置丸卷,并不與某一個(gè)項(xiàng)目綁定磨总。它包含了對(duì)本地庫(kù)位置的配置卵牍,遠(yuǎn)程庫(kù)服務(wù)卜壕,驗(yàn)證信息辩块。
settings.xml
可以配置在兩個(gè)位置:
- maven的安裝目錄
- 用戶目錄:
${user.home}/.m2/settings.xml
maven安裝目錄中的settings.xml
是一個(gè)全局的配置最岗,用戶目錄中的settings.xml
文件只對(duì)當(dāng)前用戶有效帕胆。
如果兩個(gè)文件都存在,則其內(nèi)容將合并般渡,用戶特定的settings.xml
占主導(dǎo)地位懒豹。
以下是settings
下的頂級(jí)元素的概述:
<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/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
可以使用以下表達(dá)式插入settings.xml
的內(nèi)容:
- ${user.home} 和其他所有系統(tǒng)屬性 (since Maven 3.0)
- ${env.HOME} 等環(huán)境變量
請(qǐng)注意,
settings.xml
中的<profiles>
元素中定義的properties
不能用于插值驯用。
settings 細(xì)節(jié)
簡(jiǎn)單值
一半的頂級(jí)元素是簡(jiǎn)單值脸秽,表示一系列值,用于描述構(gòu)建系統(tǒng)中全程有效的元素晨汹。
<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>
<offline>false</offline>
...
</settings>
-
localRepository:本地倉(cāng)庫(kù)的地址豹储,默認(rèn)是
${user.home}/.m2/repository
- interactiveMode:是否以交互式進(jìn)行輸入,則為true淘这,否則為false剥扣。默認(rèn)為true。例如在創(chuàng)建maven應(yīng)用上時(shí)以交互式創(chuàng)建铝穷。
1. 非交互式創(chuàng)建應(yīng)用:
mvn archetype:generate
-DgroupId=com.howtodoinjava
-DartifactId=DemoJavaProject
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
2. 交互式創(chuàng)建maven應(yīng)用
mvn archetype:generate
此時(shí)钠怯,maven會(huì)讓你輸入項(xiàng)目的一些配置,例如groupId
曙聂,artifactId
晦炊,version
等
- offline:是否在offline模式下操作。由于網(wǎng)絡(luò)設(shè)置或安全原因,此元素對(duì)無(wú)法連接到遠(yuǎn)程存儲(chǔ)庫(kù)的構(gòu)建服務(wù)器很有用断国。
Plugin Groups
該元素包含一個(gè)pluginGroup
元素列表贤姆,每個(gè)元素都包含一個(gè)groupId
。使用插件時(shí)搜索列表稳衬,并且命令行中未提供groupId霞捡。此列表自動(dòng)包含org.apache.maven.plugins
和org.codehaus.mojo
。
<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.eclipse.jetty</pluginGroup>
</pluginGroups>
...
</settings>
例如薄疚,給定上述設(shè)置碧信,Maven命令行可以以簡(jiǎn)寫(xiě)形式執(zhí)行org.eclipse.jetty:jetty-maven-plugin:run
:
mvn jetty:run
Servers
用于下載和部署的存儲(chǔ)庫(kù)由POM的repositories
和distributionManagement
元素定義。但是街夭,某些設(shè)置(如用??戶名和密碼)不應(yīng)與pom.xml一起分發(fā)砰碴。此類(lèi)信息應(yīng)存在于settings.xml
中的構(gòu)建服務(wù)器上。
<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:倉(cāng)庫(kù)的名稱
- username板丽,password:這些元素顯示為一對(duì)呈枉,表示對(duì)此服務(wù)器進(jìn)行身份驗(yàn)證所需的登錄名和密碼。
-
privateKey, passphrase:這也是成對(duì)出現(xiàn)檐什,表示私鑰的路徑(默認(rèn)是
${user.home}/.ssh/id_dsa
)和密碼碴卧。密碼和密碼元素將來(lái)可能會(huì)外部化,但是現(xiàn)在必須在settings.xml
文件中設(shè)置純文本乃正。 - filePermissions, directoryPermissions:在部署時(shí)創(chuàng)建存儲(chǔ)庫(kù)文件或目錄時(shí)住册,這些是要使用的權(quán)限。每個(gè)的合法值是對(duì)應(yīng)于* nix文件權(quán)限的三位數(shù)字瓮具,例如荧飞, 664或775。
注意:如果使用私鑰登錄服務(wù)器名党,請(qǐng)確保省略
<password>
元素叹阔。否則赤炒,密鑰將被忽略血久。
密碼加密
一個(gè)新功能 - 服務(wù)器密碼和密碼加密已添加到2.1.0+。查看此頁(yè)面的詳細(xì)信息
MIrrors
使用鏡像的一些原因:
- 互聯(lián)網(wǎng)上有一個(gè)同步鏡像禁悠,地理位置更近欧啤,速度更快
- 您希望將特定存儲(chǔ)庫(kù)替換為您可以更好地控制的內(nèi)部存儲(chǔ)庫(kù)
- 您希望運(yùn)行存儲(chǔ)庫(kù)管理器以向鏡像提供本地緩存睛藻,并且需要使用其URL
一般是第一個(gè)原因
<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必須唯一(不要與倉(cāng)庫(kù)
id
一樣)邢隧,name隨意 - url:鏡像的地址
-
mirrorOf:需要被鏡像的倉(cāng)庫(kù)
id
店印。例如,要指向Maven中央存儲(chǔ)庫(kù)(https://repo.maven.apache.org/maven2/)的鏡像倒慧,請(qǐng)將此元素設(shè)置為central按摘。更高級(jí)的映射包券,如repo1,repo2
或*,!inhouse
也是可能的。這必須與鏡像ID不匹配炫贤。
有關(guān)鏡像的更深入介紹溅固,請(qǐng)閱讀鏡像設(shè)置指南。
Proxies
如果你訪問(wèn)不了某一個(gè)倉(cāng)庫(kù)照激,可以使用代理发魄,用的不多盹牧,所以這里也不詳細(xì)說(shuō)明俩垃。想要了解的可以去官網(wǎng)查看。
<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>
...
</settings>
Profiles
settings.xml
中的profile
元素是pom.xml
profile
元素的精簡(jiǎn)版本汰寓。它由activation
口柳,repositories
,pluginRepositories
和properties
元素組成有滑。概要文件元素僅包含這四個(gè)元素跃闹,因?yàn)樗鼈冴P(guān)注整個(gè)構(gòu)建系統(tǒng)(這是settings.xml
文件的作用),而不是單個(gè)項(xiàng)目對(duì)象模型設(shè)置毛好。
如果profile
在settings.xml
中被激活望艺,則其值將覆蓋POM或profiles.xml
文件中任何等效的ID'd配置。
Activation
該屬性可以配置配置文件的激活條件肌访,例如找默,激活條件必須是 jdk8
,必須是windows
等吼驶。
<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>
當(dāng)滿足所有指定條件時(shí)激活惩激,但不是一次都需要。
-
jdk:activation在jdk元素中有一個(gè)內(nèi)置的蟹演,以Java為中心的檢查风钻。如果測(cè)試是在與給定前綴匹配的jdk版本號(hào)下運(yùn)行,則會(huì)激活此選項(xiàng)酒请。在上面的例子中骡技,
1.5.0_06
將匹配。從Maven 2.1開(kāi)始也支持范圍羞反。有關(guān)支持的范圍的更多詳細(xì)信息布朦,請(qǐng)參閱maven-enforcer-plugin。 - os:os元素可以定義上面顯示的一些操作系統(tǒng)特定屬性苟弛。有關(guān)OS值的更多詳細(xì)信息喝滞,請(qǐng)參閱maven-enforcer-plugin。
-
property:如果Maven檢測(cè)到相應(yīng)
name=value
對(duì)的屬性(可以在POM中取消引用${name}
的值)膏秫,則將激活該配置文件右遭。 -
file:最后做盅,給定的文件名可以通過(guò)存在文件來(lái)激活配置文件,或者如果它丟失了窘哈。
activation
元素不是激活配置文件的唯一方式吹榴。settings.xml
文件的activeProfile
元素可能包含配置文件的id。它們也可以在-P
標(biāo)志(例如-P test
)之后通過(guò)命令行通過(guò)逗號(hào)分隔列表顯式激活滚婉。
要查看將在特定版本中激活的配置文件图筹,請(qǐng)使用maven-help-plugin
。
mvn help:active-profiles
Properties
Maven屬性是值占位符让腹,就像Ant中的屬性一樣远剩。可以使用符號(hào)${X}
在POM內(nèi)的任何位置訪問(wèn)它們的值骇窍,其中X
是屬性瓜晤。它們有五種不同的樣式,都可以從settings.xml文件中訪問(wèn):
-
env.X
:使用“env.”前綴變量將返回shell的環(huán)境變量腹纳。例如痢掠,${env.PATH}
返回$path環(huán)境變量(Windows中是%PATH%
) -
project.x
:POM中的點(diǎn)(.)標(biāo)記路徑將包含相應(yīng)元素的值。例如:<project><version>1.0</version></project>
可通過(guò)${project.version}
訪問(wèn)嘲恍。 -
settings.x
:settings.xml
中的點(diǎn)(.)標(biāo)記路徑將包含相應(yīng)元素的值足画。例如:<settings><offline>false</offline></settings>
可通過(guò)${settings.offline}
訪問(wèn)。 - Java系統(tǒng)屬性:可通過(guò)
java.lang.System.getProperties()
訪問(wèn)的所有屬性都可用作POM屬性佃牛,例如${java.home}
淹辞。 - x:在
<properties />
元素或外部文件中設(shè)置的值,該值可以用作${someVar}
吁脱。
<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>
如果此配置文件被啟用桑涎,則可以在POM中使用${user.install}
訪問(wèn)該屬性。
Repositories
Repositories是Maven用于填充構(gòu)建系統(tǒng)的本地存儲(chǔ)庫(kù)的項(xiàng)目的遠(yuǎn)程集合兼贡。它來(lái)自這個(gè)本地存儲(chǔ)庫(kù)攻冷,Maven稱之為插件和依賴項(xiàng)。不同的遠(yuǎn)程存儲(chǔ)庫(kù)可能包含不同的項(xiàng)目遍希,并且在啟用的profile下等曼,可以搜索它們以查找匹配的版本或快照工件。
<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:這是針對(duì)每種工件凿蒜,Release或snapshot的策略禁谦。通過(guò)這兩個(gè)集合,POM可以在單個(gè)存儲(chǔ)庫(kù)中獨(dú)立于另一個(gè)類(lèi)型更改每種類(lèi)型的策略废封。例如州泊,對(duì)于開(kāi)發(fā)目的的遠(yuǎn)程庫(kù),可以決定僅啟用快照下載漂洋。
-
enabled:是否為相應(yīng)類(lèi)型(
releases
或snapshots
)啟用此存儲(chǔ)庫(kù)遥皂,是true
還是false
力喷。 -
updatePolicy:此元素指定更新本地庫(kù)頻率。Maven會(huì)將本地POM的時(shí)間戳(存儲(chǔ)在存儲(chǔ)庫(kù)的maven-metadata文件中)與遠(yuǎn)程數(shù)據(jù)進(jìn)行比較演训。選項(xiàng)包括:
always
弟孟,daily
(默認(rèn)),interva:X
(其中X是以分鐘為單位的整數(shù))或never
样悟。 -
checksumPolicy:當(dāng)Maven將文件部署到存儲(chǔ)庫(kù)時(shí)拂募,它還會(huì)部署相應(yīng)的校驗(yàn)和文件。您可以選擇
ignore
窟她,fail
或warn
缺少或不正確的校驗(yàn)和陈症。 - layout:。礁苗。爬凑。
Plugin Repositories
存儲(chǔ)庫(kù)是兩種主要類(lèi)型的工件的所在地。第一個(gè)是用作其他工件的依賴項(xiàng)的工件试伙。這些是位于中央的大多數(shù)插件。另一種類(lèi)型的工件是插件于样。Maven插件本身就是一種特殊的工件疏叨。因此,插件存儲(chǔ)庫(kù)可能與其他存儲(chǔ)庫(kù)分離(盡管如此穿剖,我還沒(méi)有聽(tīng)到令人信服的論據(jù))蚤蔓。在任何情況下,pluginRepositories
元素塊的結(jié)構(gòu)類(lèi)似于repositories
元素糊余。 pluginRepository
元素指定Maven可以在哪里找到新插件的遠(yuǎn)程位置秀又。
啟用Profiles
<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
元素贬芥,包含一個(gè)profile
的id
吐辙。無(wú)論任何環(huán)境設(shè)置如何,任何定義為activeProfile
的profile
id
都將將被啟用蘸劈。如果沒(méi)有找到匹配的profile昏苏,則不會(huì)發(fā)生任何事。
詳細(xì)的maven屬性說(shuō)明
repository
和pluginRepository
的順序會(huì)影響獲取遠(yuǎn)程工建的順序鏡像匹配規(guī)則威沫,首先找到完全匹配的鏡像贤惯,如果未找到完全匹配的鏡像,但是有多個(gè)間接匹配(符合條件)棒掠,則會(huì)選擇第一個(gè)鏡像作為鏡像孵构。
maven拉取jar的過(guò)程: