1.整体介绍

Maven的各种配置都主要集中在settings.xml里面,通常这个文件会存在$M2_HOME/conf/ settings.xml和${user.home}/.m2/settings.xml,前者属于全局设置,后者属于当前用户设置。如果两个文件都存在,内容合并,并以当前用户的文件作为主导。
配置文件整体包含的部分如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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>

2.详细详细配置

a.值的设置

localRepository :设置本地存储的路径,默认在${user.home}/.m2/repository.这个元素是一个主要的构建服务器允许所有登录的用户从一个共同的本地资源库建设特别有用。
interactiveMode : true 表示Maven应该尝试与用户输入交互,false 代表不会,默认是true.
usePluginRegistry : true 表示Maven应该使用${user.home}/.m2/plugin-registry.xml来管理插件,默认为false,需要注意的是对Maven 2.0的当前版本中,插件管理registry.xml文件不应加以依赖。
offline : true 表示这个构建系统应该在离线模式下,默认是false.这个元素是它无法连接到远程仓库,或者是因为网络设置或安全原因生成服务器有用。

b.插件模块 pluginGroups

此元素包含列表pluginGroup元素,每个元素包含的groupId。当使用插件搜索的列表和的groupId没有在命令行提供。该列表会自动包含org.apache.maven.plugins和org.codehaus.mojo。

1
2
3
4
5
6
7
8
9
10
<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的命令行可以执行org.mortbay.jetty:jetty-maven-plugin:run

mvn jetty:run

c.服务器 servers

配置库的下载和部署的服务器,然而,某些设置,如用户名和密码不应与分布式一起pom.xml中。这种类型的信息应该存在于构建服务器上的settings.xml。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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 : 是服务器的ID (而不是用户的登录)的匹配ID库/镜像Maven在尝试连接到的元素。
username, password: 显示为表示对验证到该服务器所需的登录名和密码。
privateKey, passphrase: 像前两个元素,这对指定的路径私钥 和 密码(默认 ${user.home}/.ssh/id_dsa)该密码和密码的元素可能在将来被外部化,但现在他们必须设置在纯文本的settings.xml文件。
filePermissions, directoryPermissions: 当部署创建一个库文件或目录,这些都是使用权限。每个合法的值是一个三位数corrosponding到* nix的文件权限,如 664,或775。

d. 镜像 mirrors

用于配置镜像的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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是用来区分镜元件,并从挑选对应凭证<服务器>连接到反射镜时段。
url: 这面镜像的基本URL。构建系统将使用此URL连接到存储库,而不是原来的存储库URL。
mirrorOf: 该ID的存储库,这是一面镜像。例如,指向Maven的的镜像中央存储库(https://repo.maven.apache.org/maven2/),设置此元素为中心。像更高级的映射repo1,repo2或* ,!室内也是可能的。这必须不匹配的镜子ID。

e. 代理 proxies

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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>

ID:代理的唯一标识符。这是用来区分代理的元件。
active: true 如果这个代理是有效的。这是用于声明一组代理是有用的,但只有一个可以在一个时间是活动的。
protocol, host, port: 协议,主机名,端口。
username, password: 验证到该代理服务器所需的登录名和密码。
nonProxyHosts: 不应该被代理的主机的列表。列表的分隔符是预期类型的代理服务器; 上面的例子是管道分隔-以逗号分隔的也很常见。

f.轮廓 Profiles

轮廓在该元件的settings.xml是的截短版本的pom.xml 轮廓元素。他由activation, repositories, pluginRepositories 和 properties 元素。该轮廓元素只包含这四个要素,因为它们涉及自己与构建系统作为一个整体(这是角色的settings.xml文件),不是单个项目的对象模型的设置。
如果配置文件是有效,它的价值将覆盖在POM或任何等价ID’d配置文件的profiles.xml文件。

1)激活模块 Activation

Activation是一个Profiles的关键。像POM的配置文件,配置文件的力量来自它的修改只在某些情况下一些价值的能力; 这种情况下通过一个指定的激活元件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<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已有的一个配置,以Java为中心检查jdk的元素。如果测试下一个JDK的版本号,鉴于前缀匹配运行,这将激活。在上面的例子中,1.5.0_06将匹配。范围也支持作为Maven的2.1。
os : 该操作系统的元素可以定义上述某些操作系统的特定属性。
property : 该配置文件,如果Maven的检测属性(可在POM内解除引用值将激活$ {name}的相应的)名称=值对。
file : 给定的文件名 可激活轮廓由存在的文件,或者如果它不见了。
所述活化元素不是一个唯一的方式配置文件可被激活。该的settings.xml文件的activeProfile元素可以包含配置文件的ID。它们也可以通过命令行明确激活通过一个逗号分隔后列表-P标志(如-P测试)。

2) 属性 properties

Maven的属性是值占位符,就像在Ant属性。它们的值是可访问的任何位置一个POM内通过使用符号$ {X} ,其中点X是属性。他们有五种不同的风格,从所有可访问的settings.xml文件:
a.env.X:附加了一个变量将返回shell环境变量“ENV。” 例如,$ {} env.PATH包含\ $ PATH环境变量(%PATH%在Windows中)。
b.project.x:()。A点在POM谱写路径将包含相应的元素的值。例如:<项目> <版本> 1.0 </版本> </项目>可通过访问$ {} project.version。
c.settings.x:()。A点的路径谱写的settings.xml将包含相应的元素的值。例如:<设置> <离线>假</离线> </设置>可通过访问$ {} settings.offline。
d.Java系统属性:所有属性通过访问java.lang.System.getProperties()可作为POM属性,如$ {java.home} 。
e.x:设置<属性/>元素或外部文件中,则该值可被用作$ {someVar} 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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>

3) 库 Repositories

库是从Maven用来填充构建系统的本地存储库项目远程集合。它是从Maven的调用它的插件和依赖这个本地仓库。不同的远程存储库可能包含不同的项目,以及活动的配置文件下,他们可能会搜索匹配的释放或快照神器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<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: 这些是对每种类型工件的策略,发布或快照的政策。有了这两个组,一POM具有改变一个单一存储中的每个类型独立于其它的政策的权力。例如,一个可能决定只启用快照下载,可能是发展的目的。
enabled : true或false的这个仓库是否为各自的类型(使能releases 或snapshots)
updatePolicy : 这个元素指定更新应该如何经常试图发生。Maven将当地的POM的时间戳(存储在一个存储库的Maven的元数据文件)比较遥控器。选项包括:always, daily (default), interval:X(其中X是一个以分钟为整数)或never。
checksumPolicy :当Maven部署的文件到存储库,它也部署相应的校验和文件。你的选择是ignore, fail,或者 warn的缺失或不正确的校验和。
layout : 在存储库的上面的描述,它被提到,他们都遵循一个公共布局。这主要是正确的。Maven 2的有它的仓库默认布局; 然而,Maven的1.x中有不同的布局。使用这个元素来指定,如果它是default的还是legacy。

4) 插件库 pluginRepositories

库是家庭对两大类型的工件。首先是被用作其他文物的依赖文物。这些都是广大驻留在中央的插件。另一种类型的神器是插件。Maven插件本身是一种特殊类型的神器。正因为如此,插件库可以从其他仓库分隔(虽然我还没有听到这样做一个有说服力的论据)。在任何情况下,该结构pluginRepositories元件块是类似于库元件。该pluginRepository每个元素指定的Maven的在哪里能找到新的插件远程位置。

5). 活动简介 Active Profiles

1
2
3
4
5
6
7
8
9
<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。任何个人资料 的ID定义为activeProfile将被激活,reguardless的任何环境设置。如果找不到匹配的配置什么都不会发生。例如,如果ENV测试是activeProfile,在配置文件的pom.xml(或profile.xml配置与corrosponding ID将被激活。如果没有找到这样的配置文件,然后执行将继续正常。