Maven配置settings.xml详解

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>

下面先介绍每个属性的作用,然后挑选复杂的属性详细说明。

属性名称属性值类型描述
localRepositoryString本地仓库地址,默认值是${user.home}/.m2/repository
interactiveModeboolean交互模式,如果maven需要和用户交互以获得输入,默认为true。
usePluginRegistrybooleanmaven是否应该使用plugin-registry.xml文件管理插件版本,默认为false.
offlineboolean表明maven是否一直使用离线模式管理,默认为false.
proxies/proxy*List<Proxy>用于配置不同的代理 .
servers/server*List<Server>配置服务器的特定设置,主要是身份验证方法。这允许在每个服务器上配置身份验证。
mirrors/mirror*List<Mirror>为仓库配置下载镜像。
profiles/profile*List<Profile>构建配置文件的配置,用于根据环境参数调整构建。
activeProfiles/activeProfile*List<String>手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。
pluginGroups/pluginGroup*List<String>未显式提供插件groupid时搜索插件的groupid列表.
  • proxy

<proxy>元素包含代理设置所需的信息。

元素类型类型描述
activeboolean用于配置该代理是否是激活的,默认是true.
protocolString代理网络协议。默认是http.
usernameString登录或者访问该代理的用户名,如果代理需要认证则为必填项
passwordStringT登录或者访问该代理的用户名对应的密码,如果代理需要认证则为必填项
portint代理访问的端口,默认是8080.
hostString代理主机
nonProxyHostsString不被代理的主机名列表。该列表的分隔符由代理服务器指定;可食用使用了竖线或者逗号分隔符分隔开。

应用举例

<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>元素包含服务器设置所需的信息。

元素类型描述
usernameString用于认证的用户名
passwordString对应用于身份验证的用户名的密码
privateKeyString用于身份验证的私钥位置
passphraseString与privateKey一起用于身份验证的密码短语,非必填项
filePermissionsString创建文件后具有的权限
directoryPermissionsString创建文件夹后具有的权限
configurationDOM传输层的额外配置,使用场景较为少见.
idString唯一区分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

给定仓库的下载镜像源配置

元素类型描述
mirrorOfString被映射的镜像存储仓库的服务器ID,例如“central”。这必须与镜像ID不匹配。.
nameString描述镜像的可选名称
urlString镜像存储仓库的url.
layoutString镜像存储仓库的布局。从maven 3开始,默认值是:default。
mirrorOfLayoutsString被映射的镜像存储仓库的布局,此值可用于将镜像的使用限制为具有匹配布局(除了匹配的id)的存储库。从maven 3开始.默认值是:default,legacy.
idStringID,默认值是 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的条件逻辑,生成运行时环境中触发自动包含父生成配置文件的条件。

元素类型描述
activeByDefaultboolean默认状态下是否被激活标识符,默认为false
jdkString指定检测到匹配的JDK时将激活此配置
osActivationOS指定检测到匹配的操作系统属性时将激活此配置.
propertyActivationProperty指定检测到匹配的系统属性时将激活此配置
fileActivationFile表示当指定的文件存在时激活此配置

部门配置项举例说明

  1. 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满足;

  2. 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

  1. file:表示当文件存在或不存在的时候激活,exists表示存在,missing表示不存在,两个属性可单独使用、也可以同时存在。如下配置项表示当文件/root/profile1不存在、/root/profile2存在的时候激活该profile。
<profile>
    <activation>
        <file>
            <missing>/root/profile1</missing>
            <exists>/root/profile2</exists>
        </file>
    </activation>
</profile>
  • os

这是一个用于检测操作系统的属性,以便激活其父级配置的激活器。

元素类型描述
nameString激活profile的操作系统的名字
familyString激活profile的操作系统所属家族(如 ‘windows’)
archString激活profile的操作系统体系结构.
versionString激活profile的操作系统版本
  • profile

通过profile来针对横向变化的部分来形成一个个profile,在运行时根据某种环境参数动态选择

元素类型描述
activationActivation自动触发包含此配置的条件逻辑.
properties/key=value*Properties扩展属性配置,格式如:<property.name>property.value</property.name>
repositories/repository*List<Repository>远程仓库列表
pluginRepositories/pluginRepository*List<Repository>用于发现插件的远程存储库列表.
idString标识符,默认是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

  1. release
enabledboolean是否使用此存储库下载此类型的工件,默认为true.
updatePolicyString指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always,daily(默认),interval:X(这里X是以分钟为单位的时间间隔),或者never
checksumPolicyString当Maven验证构件校验文件失败时该怎么做-ignore, fail, 或者warn.
  1. snapshot
    与release配置选项相同,可对照着配置。

下面再介绍repository配置元素

元素类型描述
releasesRepositoryPolicy如何处理远程仓库里发布版本的下载
snapshotsRepositoryPolicy如何处理远程仓库里快照版本的下载
idString远程仓库唯一标识.
nameString远程仓库名称,人能识别的名称
urlString远程仓库URL
layoutString用于定位和排序构件的仓库布局类型-可以是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

存储仓库包含与远程存储仓库建立连接所需的信息

元素类型描述
releasesRepositoryPolicy如何处理远程仓库里发布版本的下载
snapshotsRepositoryPolicy如何处理远程仓库里快照版本的下载
idString远程仓库唯一标识.
nameString远程仓库名称,人能识别的名称
urlString远程仓库URL
layoutString用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留),默认为default.

该项配置和repository相同,可参考repository配置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banche168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值