本文是对https://maven.apache.org/settings.html的翻译和总结
介绍
快速概览
settings文件是一个全局的配置,并不与某一个项目绑定。它包含了对本地库位置的配置,远程库服务,验证信息。
settings.xml
可以配置在两个位置:
- maven的安装目录
- 用户目录:
${user.home}/.m2/settings.xml
maven安装目录中的settings.xml
是一个全局的配置,用户目录中的settings.xml
文件只对当前用户有效。
如果两个文件都存在,则其内容将合并,用户特定的settings.xml
占主导地位。
以下是settings
下的顶级元素的概述:
<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>
可以使用以下表达式插入settings.xml
的内容:
- ${user.home} 和其他所有系统属性 (since Maven 3.0)
- ${env.HOME} 等环境变量
请注意,
settings.xml
中的<profiles>
元素中定义的properties
不能用于插值。
settings 细节
简单值
一半的顶级元素是简单值,表示一系列值,用于描述构建系统中全程有效的元素。
<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:本地仓库的地址,默认是
${user.home}/.m2/repository
- interactiveMode:是否以交互式进行输入,则为true,否则为false。默认为true。例如在创建maven应用上时以交互式创建。
1. 非交互式创建应用:
mvn archetype:generate
-DgroupId=com.howtodoinjava
-DartifactId=DemoJavaProject
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
2. 交互式创建maven应用
mvn archetype:generate
此时,maven会让你输入项目的一些配置,例如groupId
,artifactId
,version
等
- offline:是否在offline模式下操作。由于网络设置或安全原因,此元素对无法连接到远程存储库的构建服务器很有用。
Plugin Groups
该元素包含一个pluginGroup
元素列表,每个元素都包含一个groupId
。使用插件时搜索列表,并且命令行中未提供groupId。此列表自动包含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>
例如,给定上述设置,Maven命令行可以以简写形式执行org.eclipse.jetty:jetty-maven-plugin:run
:
mvn jetty:run
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:仓库的名称
- username,password:这些元素显示为一对,表示对此服务器进行身份验证所需的登录名和密码。
-
privateKey, passphrase:这也是成对出现,表示私钥的路径(默认是
${user.home}/.ssh/id_dsa
)和密码。密码和密码元素将来可能会外部化,但是现在必须在settings.xml
文件中设置纯文本。 - filePermissions, directoryPermissions:在部署时创建存储库文件或目录时,这些是要使用的权限。每个的合法值是对应于* nix文件权限的三位数字,例如, 664或775。
注意:如果使用私钥登录服务器,请确保省略
<password>
元素。否则,密钥将被忽略。
密码加密
一个新功能 - 服务器密码和密码加密已添加到2.1.0+。查看此页面的详细信息
MIrrors
使用镜像的一些原因:
- 互联网上有一个同步镜像,地理位置更近,速度更快
- 您希望将特定存储库替换为您可以更好地控制的内部存储库
- 您希望运行存储库管理器以向镜像提供本地缓存,并且需要使用其URL
一般是第一个原因
<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必须唯一(不要与仓库
id
一样),name随意 - url:镜像的地址
-
mirrorOf:需要被镜像的仓库
id
。例如,要指向Maven中央存储库(https://repo.maven.apache.org/maven2/)的镜像,请将此元素设置为central。更高级的映射,如repo1,repo2
或*,!inhouse
也是可能的。这必须与镜像ID不匹配。
有关镜像的更深入介绍,请阅读镜像设置指南。
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>
...
</settings>
Profiles
settings.xml
中的profile
元素是pom.xml
profile
元素的精简版本。它由activation
,repositories
,pluginRepositories
和properties
元素组成。概要文件元素仅包含这四个元素,因为它们关注整个构建系统(这是settings.xml
文件的作用),而不是单个项目对象模型设置。
如果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>
当满足所有指定条件时激活,但不是一次都需要。
-
jdk:activation在jdk元素中有一个内置的,以Java为中心的检查。如果测试是在与给定前缀匹配的jdk版本号下运行,则会激活此选项。在上面的例子中,
1.5.0_06
将匹配。从Maven 2.1开始也支持范围。有关支持的范围的更多详细信息,请参阅maven-enforcer-plugin。 - os:os元素可以定义上面显示的一些操作系统特定属性。有关OS值的更多详细信息,请参阅maven-enforcer-plugin。
-
property:如果Maven检测到相应
name=value
对的属性(可以在POM中取消引用${name}
的值),则将激活该配置文件。 -
file:最后,给定的文件名可以通过存在文件来激活配置文件,或者如果它丢失了。
activation
元素不是激活配置文件的唯一方式。settings.xml
文件的activeProfile
元素可能包含配置文件的id。它们也可以在-P
标志(例如-P test
)之后通过命令行通过逗号分隔列表显式激活。
要查看将在特定版本中激活的配置文件,请使用maven-help-plugin
。
mvn help:active-profiles
Properties
Maven属性是值占位符,就像Ant中的属性一样。可以使用符号${X}
在POM内的任何位置访问它们的值,其中X
是属性。它们有五种不同的样式,都可以从settings.xml文件中访问:
-
env.X
:使用“env.”前缀变量将返回shell的环境变量。例如,${env.PATH}
返回$path环境变量(Windows中是%PATH%
) -
project.x
:POM中的点(.)标记路径将包含相应元素的值。例如:<project><version>1.0</version></project>
可通过${project.version}
访问。 -
settings.x
:settings.xml
中的点(.)标记路径将包含相应元素的值。例如:<settings><offline>false</offline></settings>
可通过${settings.offline}
访问。 - Java系统属性:可通过
java.lang.System.getProperties()
访问的所有属性都可用作POM属性,例如${java.home}
。 - x:在
<properties />
元素或外部文件中设置的值,该值可以用作${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}
访问该属性。
Repositories
Repositories是Maven用于填充构建系统的本地存储库的项目的远程集合。它来自这个本地存储库,Maven称之为插件和依赖项。不同的远程存储库可能包含不同的项目,并且在启用的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:这是针对每种工件,Release或snapshot的策略。通过这两个集合,POM可以在单个存储库中独立于另一个类型更改每种类型的策略。例如,对于开发目的的远程库,可以决定仅启用快照下载。
-
enabled:是否为相应类型(
releases
或snapshots
)启用此存储库,是true
还是false
。 -
updatePolicy:此元素指定更新本地库频率。Maven会将本地POM的时间戳(存储在存储库的maven-metadata文件中)与远程数据进行比较。选项包括:
always
,daily
(默认),interva:X
(其中X是以分钟为单位的整数)或never
。 -
checksumPolicy:当Maven将文件部署到存储库时,它还会部署相应的校验和文件。您可以选择
ignore
,fail
或warn
缺少或不正确的校验和。 - layout:。。。
Plugin Repositories
存储库是两种主要类型的工件的所在地。第一个是用作其他工件的依赖项的工件。这些是位于中央的大多数插件。另一种类型的工件是插件。Maven插件本身就是一种特殊的工件。因此,插件存储库可能与其他存储库分离(尽管如此,我还没有听到令人信服的论据)。在任何情况下,pluginRepositories
元素块的结构类似于repositories
元素。 pluginRepository
元素指定Maven可以在哪里找到新插件的远程位置。
启用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
元素,包含一个profile
的id
。无论任何环境设置如何,任何定义为activeProfile
的profile
id
都将将被启用。如果没有找到匹配的profile,则不会发生任何事。
-
详细的maven属性说明
-
repository
和pluginRepository
的顺序会影响获取远程工建的顺序 -
镜像匹配规则,首先找到完全匹配的镜像,如果未找到完全匹配的镜像,但是有多个间接匹配(符合条件),则会选择第一个镜像作为镜像。
maven拉取jar的过程:

网友评论