settings.xml详解

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目录下,然后改成自己想要的样子。

元素讲解

元素概览

顶级元素

  1. LocalRepository

    作用:该值表示构建系统本地仓库的路径。默认值:${user.home}/.m2/repository

    D:\Maven\repository

  2. InteractiveMode

    作用:表示maven是否需要和用户交互以获得输入。

    默认值:true

    true

  3. offline

    作用:表示maven是否需要在离线模式下运行。

    默认值:false

    当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。

    false

  4. pluginGroups

    作用:当插件的组织idgroupId)没有显式提供时,供搜寻插件groupId的列表。

    默认值:默认情况下,maven会自动把org.apache.maven.pluginsorg.codehaus.mojo添加到pluginGroups下。

    com.your1.plugins
     <pluginGroup>com.your2.plugins</pluginGroup>
    
  5. proxies

    作用:用来配置不同的代理, 多代理 profiles 可以应对笔记本或移动设备的工作环境: 通过简单的设置 profile id 就可以很容易的更换整个代理配置

  1. servers

    作用:进行远程服务器访问时所需的授权配置信息。通过系统唯一的 server id 进行唯一关联

    注意:您应该指定用户名/密码或私钥/密码,因为这些配对是一起使用。

  1. mirrors

    作用:用于替代指定远程仓库的镜像服务器配置,例如当您无法连接上国外的仓库是, 可以指定连接到国内的镜像服务器,同时还可以缓解镜像仓库的压力

    注意:pom.xmlsetting.xml 中配置的仓库和镜像优先级关系(``mirror优先级高于repository`)

    • 多个mirror按照id字母顺序进行排列,与编写顺序无关
    • 在第一个mirror找不到artifact,不会继续找下一个镜像
    • 只有当mirror无法链接的时候,才会尝试找下一个镜像,类似容灾备份

alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central
  1. profiles

    作用:构建方法的配置清单, maven 将根据不同环境参数来使用这些构建配置。

    注意:settings.xml 中的 profile元素是 pom.xmlprofile元素的裁剪版本。

    • settings.xml负责的是整体的构建过程, pom.xml负责单独的项目对象构建过程。

    • settings.xml 只包含了id, activation, repositories, pluginRepositoriesproperties 元素。

    • 如果 settings中的 profile 被激活, 它的值会覆盖任何其它定义在 pom.xml中或 profile.xml中的相同 id 的 profile

  1. 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>
  1. activeProfiles

    作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile

    说明:

    • 任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活
    • 如果没有匹配的profile,则什么都不会发生。
    • 如果运行过程中找不到这样一个profileMaven则会像往常一样运行。
    特殊说明

    私服的配置推荐用profile配置而不是mirror

    实际应用中,经常使用的是<localRepository><servers><mirrors><profiles>有限几个节点,其他节点使用默认值足够应对大部分的应用场景。

    maven在用户home目录下的setting.xml<localRepository>可以不配置。

posted @   国王不愿拜师  阅读(363)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示