settings.xml详解
作用
用来设置Maven
参数的配置文件,在Maven
中提供了一个settings.xml
文件来定义Maven
的全局配置信息。我们通过这个文件来定义本地仓库、远程仓库和联网使用的代理信息等配置。
文件位置
-
全局配置:
Maven
的安装目录的conf
子目录下面(${M2_HOME}/conf/settings.xml
) -
用户目录的的
.m2
子目录下面({user.home}/.m2/settings.xml
)。配置文件优先级:局部>全局
在Maven安装目录的conf子目录下面的settings.xml才是真正的全局的配置。而用户目录的.m2子目录下面的settings.xml的配置只是针对当前用户的。当这两个文件同时存在的时候,那么对于相同的配置信息用户目录下面的settings.xml中定义的会覆盖Maven安装目录下面的settings.xml中的定义。用户目录下的settings.xml文件一般是不存在的,但是Maven允许我们在这里定义我们自己的settings.xml,如果需要在这里定义我们自己的settings.xml的时候就可以把Maven安装目录下面的settings.xml文件拷贝到用户目录的.m2目录下,然后改成自己想要的样子。
元素讲解
元素概览
顶级元素
-
LocalRepository
作用:该值表示构建系统本地仓库的路径。默认值:
${user.home}/.m2/repository
D:\Maven\repository -
InteractiveMode
作用:表示
maven
是否需要和用户交互以获得输入。默认值:
true
true -
offline
作用:表示maven是否需要在离线模式下运行。
默认值:
false
当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。
false -
pluginGroups
作用:当插件的组织
id
(groupId
)没有显式提供时,供搜寻插件groupId
的列表。默认值:默认情况下,
maven
会自动把org.apache.maven.plugins
和org.codehaus.mojo
添加到pluginGroups
下。com.your1.plugins <pluginGroup>com.your2.plugins</pluginGroup>
-
proxies
作用:用来配置不同的代理, 多代理
profiles
可以应对笔记本或移动设备的工作环境: 通过简单的设置profile id
就可以很容易的更换整个代理配置
-
servers
作用:进行远程服务器访问时所需的授权配置信息。通过系统唯一的
server id
进行唯一关联注意:您应该指定用户名/密码或私钥/密码,因为这些配对是一起使用。
-
mirrors
作用:用于替代指定远程仓库的镜像服务器配置,例如当您无法连接上国外的仓库是, 可以指定连接到国内的镜像服务器,同时还可以缓解镜像仓库的压力
注意:
pom.xml
和setting.xml
中配置的仓库和镜像优先级关系(``mirror优先级高于
repository`)- 多个
mirror
按照id
字母顺序进行排列,与编写顺序无关 - 在第一个
mirror
找不到artifact
,不会继续找下一个镜像 - 只有当
mirror
无法链接的时候,才会尝试找下一个镜像,类似容灾备份
- 多个
-
profiles
作用:构建方法的配置清单,
maven
将根据不同环境参数来使用这些构建配置。注意:
settings.xml
中的profile
元素是pom.xml
中profile
元素的裁剪版本。-
settings.xml
负责的是整体的构建过程,pom.xml
负责单独的项目对象构建过程。 -
settings.xml
只包含了id
,activation
,repositories
,pluginRepositories
和properties
元素。 -
如果
settings
中的profile
被激活, 它的值会覆盖任何其它定义在pom.xml
中或profile.xml
中的相同 id 的profile
。
-
-
Activation
自动触发profile的条件逻辑。这是profile中最重要的元素。跟pom.xml中的profile一样,settings.xml中的profile也可以在特定环境下改变一些值,而这些环境是通过activation元素来指定的。activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。
jdk:表示当jdk的版本满足条件的时候激活,在这里是1.6。os:表示当操作系统满足条件的时候激活。
property:property是键值对的形式,表示当Maven检测到了这样一个键值对的时候就激活该profile。
file:表示当文件存在或不存在的时候激活,exists表示存在,missing表示不存在。如下面例子表示当文件hello/world不存在的时候激活该profile。
<profile>
<activation>
<file>
<missing>hello/world</missing>
</file>
</activation>
</profile>
repositories:用于定义远程仓库的(远程仓库列表),当该profile是激活状态的时候,这里面定义的远程仓库将作为当前pom的远程仓库。它是maven用来填充构建系统本地仓库所使用的一组远程仓库。
<repositories>
<!--包含需要连接到远程仓库的信息 -->
<repository>
<!--远程仓库唯一标识 -->
<id>codehausSnapshots</id>
<!--远程仓库名称 -->
<name>Codehaus Snapshots</name>
<!--如何处理远程仓库里发布版本的下载 -->
<releases>
<!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
<enabled>false</enabled>
<!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。 -->
<updatePolicy>always</updatePolicy>
<!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。 -->
<checksumPolicy>warn</checksumPolicy>
</releases>
<!--如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 -->
<snapshots>
<enabled />
<updatePolicy />
<checksumPolicy />
</snapshots>
<!--远程仓库URL,按protocol://hostname/path形式 -->
<url>http://snapshots.maven.codehaus.org/maven2</url>
<!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 -->
<layout>default</layout>
</repository>
</repositories>
**releases、snapshots**:这是对于工件的类型的限制。
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
**enabled:**表示这个仓库是否允许这种类型的工件。
updatePolicy:表示多久尝试更新一次。可选值有always、daily、interval:minutes(表示每多久更新一次)和never。
checksumPolicy:当Maven在部署项目到仓库的时候会连同校验文件一起提交,checksumPolicy表示当这个校验文件缺失或不正确的时候该如何处理,可选项有ignore、fail和warn。
pluginRepositories:(插件仓库列表)在Maven中有两种类型的仓库,一种是存储工件的仓库,另一种就是存储plugin插件的仓库。pluginRepositories的定义和repositories的定义类似,它表示Maven在哪些地方可以找到所需要的插件。和repository类似,只是repository是管理jar包依赖的仓库,pluginRepositories则是管理插件的仓库。maven插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。
<pluginRepositories>
<!-- 定义了两个插件仓库 -->
<pluginRepository>
<id>ztyhcorp-repository-maven-public</id>
<name>maven-public</name>
<url>http://ztyhcorp-maven.pkg.devops.tzbank.ins/repository/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>ztyhcorp-repository-maven-vulnerability</id>
<name>maven-vulnerability</name>
<url>http://ztyhcorp-maven.pkg.devops.tzbank.ins/repository/repository/maven-vulnerability/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
-
activeProfiles
作用:手动激活
profiles
的列表,按照profile
被应用的顺序定义activeProfile
。说明:
- 任何在
activeProfile
中定义的profile id
,不论环境设置如何,其对应的profile
都会被激活 - 如果没有匹配的
profile
,则什么都不会发生。 - 如果运行过程中找不到这样一个
profile
,Maven
则会像往常一样运行。
特殊说明
私服的配置推荐用
profile
配置而不是mirror
实际应用中,经常使用的是
<localRepository>
、<servers>
、<mirrors>
、<profiles>
有限几个节点,其他节点使用默认值足够应对大部分的应用场景。maven在用户home目录下的setting.xml
<localRepository>
可以不配置。 - 任何在