maven强大的之处在于其强大的依赖管理、编译构建能力、以及可扩展性和其可配置的特性,而settings.xml是用来配置Maven工具的核心。它可以是基于用户级别的也可以是基于全局的配置,同一属性在用户级别和全局级别同时出现时,用户级别的配置优先级更高。
顶级元素
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">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
下面先介绍每个属性的作用,然后挑选复杂的属性详细说明。
属性名称 | 属性值类型 | 描述 |
localRepository | String | 本地仓库地址,默认值是${user.home}/.m2/repository |
interactiveMode | boolean | 交互模式,如果maven需要和用户交互以获得输入,默认为true。 |
usePluginRegistry | boolean | maven是否应该使用plugin-registry.xml文件管理插件版本,默认为false. |
offline | boolean | 表明maven是否一直使用离线模式管理,默认为false. |
proxies/proxy* |
| 用于配置不同的代理 . |
servers/server* |
| 配置服务器的特定设置,主要是身份验证方法。这允许在每个服务器上配置身份验证。 |
mirrors/mirror* |
| 为仓库配置下载镜像。 |
profiles/profile* |
| 构建配置文件的配置,用于根据环境参数调整构建。 |
activeProfiles/activeProfile* |
| 手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。 |
pluginGroups/pluginGroup* |
| 未显式提供插件groupid时搜索插件的groupid列表. |
- proxy
<proxy>
元素包含代理设置所需的信息。
元素类型 | 类型 | 描述 |
active | boolean | 用于配置该代理是否是激活的,默认是true. |
protocol | String | 代理网络协议。默认是http. |
username | String | 登录或者访问该代理的用户名,如果代理需要认证则为必填项 |
password | String | T登录或者访问该代理的用户名对应的密码,如果代理需要认证则为必填项 |
port | int | 代理访问的端口,默认是8080. |
host | String | 代理主机 |
nonProxyHosts | String | 不被代理的主机名列表。该列表的分隔符由代理服务器指定;可食用使用了竖线或者逗号分隔符分隔开。 |
应用举例
<proxies>
<proxy>
<!--代理的唯一标识符,用来区分不同的代理元素。 -->
<id>proxyName</id>
<!--该代理是否是被激活-->
<active>true</active>
<!--代理的协议-->
<protocol>https</protocol>
<!--代理的主机 -->
<host>remoteproxy.com</host>
<!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<port>80</port>
<!--代理的主机协议端口组成可访问的地址: https://remoteproxy.com -->
<!--访问代理的用户名,如果代理需要认证则为必填项 -->
<username>admin</username>
<!--访问代码的用户名对应的密码,如果代理需要认证则为必填项 -->
<password>password</password>
<!--不被代理的主机名列表。该列表的分隔符由代理服务器指定;可食用使用了竖线或者逗号分隔符分隔开 -->
<nonProxyHosts>proxy1|proxy2</nonProxyHosts>
</proxy>
</proxies>
- server
<server>
元素包含服务器设置所需的信息。
元素 | 类型 | 描述 |
username | String | 用于认证的用户名 |
password | String | 对应用于身份验证的用户名的密码 |
privateKey | String | 用于身份验证的私钥位置 |
passphrase | String | 与privateKey一起用于身份验证的密码短语,非必填项 |
filePermissions | String | 创建文件后具有的权限 |
directoryPermissions | String | 创建文件夹后具有的权限 |
configuration | DOM | 传输层的额外配置,使用场景较为少见. |
id | String | 唯一区分server的信息,默认为default |
以上配置主要是server的认证和访问权限配置 用户名和密码方式为一组,私钥和密码短语为一组,,如果代理需要认证则为必填项,则可以二选一。
应用举例
<servers>
<server>
<!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
<id>serverName</id>
<!-- 用于认证的用户名,如果服务器需要则为必填,不需要则可不填 -->
<username>admin</username>
<!-- 用户对应的密码 -->
<password>password</password>
<!--鉴权时使用的私钥位置。默认是${user.home}/.ssh/id_dsa -->
<privateKey>${usr.home}/.ssh/id_dsa</privateKey>
<!--鉴权时使用的私钥密码 -->
<passphrase>passphrase</passphrase>
<!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 -->
<filePermissions>664</filePermissions>
<!--目录被创建时的权限。 -->
<directoryPermissions>775</directoryPermissions>
</server>
</servers>
- mirror
给定仓库的下载镜像源配置
元素 | 类型 | 描述 |
mirrorOf | String | 被映射的镜像存储仓库的服务器ID,例如“central”。这必须与镜像ID不匹配。. |
name | String | 描述镜像的可选名称 |
url | String | 镜像存储仓库的url. |
layout | String | 镜像存储仓库的布局。从maven 3开始,默认值是:default。 |
mirrorOfLayouts | String | 被映射的镜像存储仓库的布局,此值可用于将镜像的使用限制为具有匹配布局(除了匹配的id)的存储库。从maven 3开始.默认值是:default,legacy. |
id | String | ID,默认值是 default. |
应用举例
<mirrors>
<mirror>
<!-- 该镜像存储仓库的识符,用来区分不同的mirror元素,元素之间的不能ID不能一样 -->
<id>maven</id>
<!-- 镜像名称 -->
<name>maven2</name>
<!-- 镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://repo.maven.apache.org/maven2/</url>
<!-- 被映射成镜像存储仓库的服务器的id。例如,如果我们要设置了一个Maven中央仓库的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。 -->
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
- activation
自动触发父级profile的条件逻辑,生成运行时环境中触发自动包含父生成配置文件的条件。
元素 | 类型 | 描述 |
activeByDefault | boolean | 默认状态下是否被激活标识符,默认为false |
jdk | String | 指定检测到匹配的JDK时将激活此配置 |
os | ActivationOS | 指定检测到匹配的操作系统属性时将激活此配置. |
property | ActivationProperty | 指定检测到匹配的系统属性时将激活此配置 |
file | ActivationFile | 表示当指定的文件存在时激活此配置 |
部门配置项举例说明
- jdk
<jdk>[1.4,1.7)</jdk>
表示1.4、1.5和1.6满足;<jdk>[1.4,1.7]</jdk>
表示1.4、1.5、1.6和1.7满足; - property:以键值对的形式存在,当maven检测到了这样一个键值对的时候就激活父profile
(1)当存在属性key的时候激活父级profile。
<property>
<name>key</name>
</property>
(2)当属性key的值为value的时候激活父级profile。
<property>
<name>key</name>
<value>value</value>
</property>
如果要激活该profile,可以在调用Maven指令的时候加上参数key并指定其值为value,如:mvn compile –Dkey=value
- file:表示当文件存在或不存在的时候激活,exists表示存在,missing表示不存在,两个属性可单独使用、也可以同时存在。如下配置项表示当文件/root/profile1不存在、/root/profile2存在的时候激活该profile。
<profile>
<activation>
<file>
<missing>/root/profile1</missing>
<exists>/root/profile2</exists>
</file>
</activation>
</profile>
- os
这是一个用于检测操作系统的属性,以便激活其父级配置的激活器。
元素 | 类型 | 描述 |
name | String | 激活profile的操作系统的名字 |
family | String | 激活profile的操作系统所属家族(如 ‘windows’) |
arch | String | 激活profile的操作系统体系结构. |
version | String | 激活profile的操作系统版本 |
- profile
通过profile来针对横向变化的部分来形成一个个profile,在运行时根据某种环境参数动态选择
元素 | 类型 | 描述 |
activation | Activation | 自动触发包含此配置的条件逻辑. |
properties/key=value* | Properties | 扩展属性配置,格式如:<property.name>property.value</property.name> |
repositories/repository* |
| 远程仓库列表 |
pluginRepositories/pluginRepository* |
| 用于发现插件的远程存储库列表. |
id | String | 标识符,默认是default |
应用举例:
<profiles>
<profile>
<!-- profile的唯一标识 -->
<id>testInCompile80</id>
<!-- 自动触发profile的条件逻辑 -->
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.8</jdk>
<os>
<name>Windows 7</name>
<family>Windows</family>
<arch>x64</arch>
<version></version>
</os>
<property>
<name>mavenVersion</name>
<value>3.6.2</value>
</property>
<file>
<exists>${basedir}/profile1.properties</exists>
<missing>${basedir}/profile2.properties</missing>
</file>
</activation>
<!-- 扩展属性列表 -->
<properties />
<!-- 远程仓库列表 -->
<repositories />
<!-- 插件仓库列表 -->
<pluginRepositories />
...
</profile>
</profiles>
- repository
存储仓库包含与远程存储仓库建立连接所需的信息
在介绍前先介绍两个概念,仓库策略,release和snapshot
- release
enabled | boolean | 是否使用此存储库下载此类型的工件,默认为true. |
updatePolicy | String | 指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always,daily(默认),interval:X(这里X是以分钟为单位的时间间隔),或者never |
checksumPolicy | String | 当Maven验证构件校验文件失败时该怎么做-ignore, fail, 或者warn. |
- snapshot
与release配置选项相同,可对照着配置。
下面再介绍repository配置元素
元素 | 类型 | 描述 |
releases | RepositoryPolicy | 如何处理远程仓库里发布版本的下载 |
snapshots | RepositoryPolicy | 如何处理远程仓库里快照版本的下载 |
id | String | 远程仓库唯一标识. |
name | String | 远程仓库名称,人能识别的名称 |
url | String | 远程仓库URL |
layout | String | 用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留),默认为default. |
<repositories>
<!--包含需要连接到远程仓库的信息 -->
<repository>
<!--远程仓库唯一标识 -->
<id>codehausSnapshots</id>
<!--远程仓库名称 -->
<name>Codehaus Snapshots</name>
<!--如何处理远程仓库里发布版本的下载 -->
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled />
<updatePolicy />
<checksumPolicy />
</snapshots>
<url>http://snapshots.maven.codehaus.org/maven2</url>
<layout>default</layout>
</repository>
</repositories>
- pluginRepository
存储仓库包含与远程存储仓库建立连接所需的信息
元素 | 类型 | 描述 |
releases | RepositoryPolicy | 如何处理远程仓库里发布版本的下载 |
snapshots | RepositoryPolicy | 如何处理远程仓库里快照版本的下载 |
id | String | 远程仓库唯一标识. |
name | String | 远程仓库名称,人能识别的名称 |
url | String | 远程仓库URL |
layout | String | 用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留),默认为default. |
该项配置和repository相同,可参考repository配置。