maven setting.xml详解

工作原理

Maven安装目录下的conf文件夹下面有一个settings.xml是全局配置文件,如果没有配置用户setting.xml,则使用该全局配置文件。也可以使用用户HOME目录下的.m2文件夹下的settings.xml文件覆盖全局settings.xml文件的配置。

常用setting.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>${user.home}/.m2/repository</localRepository>
       <interactiveMode>true</interactiveMode>
       <offline>false</offline>
       <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>
     <mirrors>
       <mirror>
         <id>server001</id>
         <name>PlanetMirror Australia</name>
         <url>http://downloads.planetmirror.com/pub/maven2</url>
         <mirrorOf>central</mirrorOf>
       </mirror>
   </mirrors>
   <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>
      <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>
  <activeProfiles>  
     <activeProfile>test</activeProfile>  
</activeProfiles>  
</settings>

配置详解

参数描述
localRepository本地仓库路径, 默认值: ${user.home}/.m2/repository
interactiveMode当 maven 需要输入值的时候, 是否交由用户输入, 默认为true;false 情况下 maven 将根据使用配置信息进行填充
offline是否支持联网进行 artifact 下载、 部署等操作, 默认: false
servermaven中用pom.xml中的repositories和distributionManagement来表示包的下载和上传路径,但是pom.xml文件中不能配置验证信息,比如用户名(username)和密码(password)
server.id这个id会跟mirrors下的mirror的id或者repository中的id相对应,其中mirror用于配置远程仓库信息,而如果mirror对应的远程仓库需要权限验证时,则可以通过server进行配置
server.username远程仓库权限验证的用户名
server.password远程仓库权限验证的密码
privateKey跟之前的username一样,只是这种是ssh key
passphrase跟之前的password一样,这个是ssh key的密码
filePermissions当我们要将文件发布到远程仓库时,这里用于控制文件的权限,跟linux文件权限一样,通常由664或者775
directoryPermissions这个是控制发布的文件目录的权限
mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址
mirror.idid和name用于唯一标识一个mirror,其中id会跟server的id进行匹配去设置验证信息
mirror.name设置镜像的名字
url设置镜像地址
mirrorOf标签里面放置的是要被镜像的Repository ID
profiles用于设置不同环境的配置,每个profile都有唯一的id,也包含properties属性。这里为每个profile都定义一个名为profiles.active的properties,每个环境的值不同。当我们打包项目时,激活不同的环境,profiles.active字段就会被赋予不同的值
profile.id不同环境Profile的唯一id
activation用于配置不同环境的不同参数
activation.repositories用于配置下载包的远程仓库的信息
activation.pluginRepositories用于配置插件下载包的远程仓库的信息
activeProfiles用于设置默认的profile

镜像(mirror)详解

没有配置镜像架构
在这里插入图片描述

配置了镜像之后的架构
在这里插入图片描述

Profile激活方法

1.通过maven命令参数

mvn clean package -Ptest

2.通过pom文件里的activation属性

   <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
            <!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失-->
            <activation>
                <!--配置默认激活-->
                <activeByDefault>true</activeByDefault>
                
                <!--通过系统环境变量,name-value自定义-->
                <property>
                    <name>env</name>
                    <value>test</value>
                </property>
            </activation>
     </profile>

3.settings.xml中使用activeProfiles指定

 <activeProfiles>  
     <activeProfile>test</activeProfile>  
</activeProfiles>  

版权声明:本文为qinwuxian19891211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。