1、 setting.xml
setting.xml 是maven的管理配置文件,包含了系统级别的配置和当前用户级别的配置,用户级别的路径是~/.m2,系统级别的是yarn的maven用户密码 maven配置文件用户级_xmlM2_HOME是在安装的时候设置好的maven路径,我们一般使用的是用户级别的文件。

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

localRepository
本地仓库地址,默认情况下,下载到本地的代码库存放在${user.home}/.m2/repository文件夹中的,用户如果想存在放其他地方,配置该属性即可
interactiveMode
用户交互模式,默认为true
usePluginRegistry
是否使用插件仓库、默认为false、如果需要使用,则需要在当前路径下创建plugin-registry.xml文件并设置为true
offline
是否在离线状态下运行,如果系统需要在离线状态下运行,则设置为true,默认为false
pluginGroups
插件组,当插件的groupId没有显式提供时,供搜寻插件(groupId)的列表

<pluginGroups>
	    <pluginGroup>org.mortbay.jetty</pluginGroup>
</pluginGroups>

入上述代码,包含了org.mortbay.jetty 的插件,例如,当我们需要执行该插件的run目标时,可以执行org.mortbay.jetty:jetty-maven-plugin:run,又或者可以简化成mvn jetty:run,关于为何会简化成如此,到插件的部分细说。

servers
服务配置,主要是针对需要鉴权的仓库的配置,有些仓库默认匿名用户可以访问,但是可能存在一些私服需要对用户进行鉴权,有相关权限的用户才可以继续访问或者操作。

<servers>
	    <server>
	      <id>server001</id>      <!-- 服务ID,和仓库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
镜像地址,对仓库地址的一种映射关系,国外的仓库地址可能不是很稳定,类似于AliBaBa和OSchina搭建的镜像地址,我们可以配置镜像地址,使得访问速度更快

<mirrors>
    <mirror>
      <id>planetmirror.com</id>   <!-- 镜像ID,唯一性即可-->
      <name>PlanetMirror Australia</name>   <!-- 镜像名字 -->
      <url>http://downloads.planetmirror.com/pub/maven2</url>  <!-- 镜像地址 -->
      <mirrorOf>central</mirrorOf>  <!-- 映射的具体仓库ID以及其操作-->
    </mirror>
  </mirrors>

-proxies
代理,主要是为了便于在各自网络环境下使用

<proxies>
    <proxy>
      <id>myproxy</id>   <!-- 代理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>

profiles 和 activeProfiles
profile,拥有多套环境,可以根据参数任意切换,如需使用需要在activeProfiles中加入该profile的ID。
包含了activation, repositories, pluginRepositories和properties四种元素,其中activation就类似于properties,就和一个KV对一般,剩下的就是仓库和插件了
Repositories
仓库的配置,其中包含了快照版本SNAPSHOT和发布版本RELEASE

<repositories>
  <repository>
   <id>codehausSnapshots</id> <!-- 仓库ID 需唯一 -->
   <name>Codehaus Snapshots</name>  <!-- 仓库名称 -->
    <releases>   <!-- 正式版本一-->
      <enabled>false</enabled>    <!-- 是否可正常使用 -->
     <updatePolicy>always</updatePolicy> <!-- 更新策略 -->
      <checksumPolicy>warn</checksumPolicy> <!-- 校验策略,分为ignore、fail、warn -->
    </releases>
   <snapshots>
    <enabled>true</enabled>
    <updatePolicy>never</updatePolicy>
      <checksumPolicy>fail</checksumPolicy>
    </snapshots>
    <url>http://snapshots.maven.codehaus.org/maven2</url> 
    <!-- 仓库地址,按protocol://hostname/path形式 -->
    <layout>default</layout> <!-- -->
  </repository>
</repositories>

如上代码,需要注意 updatePolicy 更新策略,主要是如下几种值
always 总是更新
daily 每天更新一次(默认值)
interval:X X分钟更新一次
never 永远都不更新

部署到远程仓库
上面所说的仓库和我们现在说的远程仓库是同一种东西,只是一个是推送到远程,另一个是拉取到本地使用。
部署到远程仓库,需要在各自项目的POM文件中部署好distributionManagement元素,例如如下代码

<distributionManagement>
   <repository>
       <id>deployment</id>
       <name>internal repository for releases</name>
       <url>http://test.com/nexus/releases/</url>
   </repository>
   <snapshotRepository>
       <id>deployment</id>
       <name>internal repository for snapshots</name>
       <url>http://test.com/nexus/snapshots/</url>
   </snapshotRepository>
</distributionManagement>

配置中包含了release和snapshot两种版本模式,前者表示稳定版本,一般情况下提供给别人活着发布到生产环境的都是该版本,snapshot快照版本则是处于开发模式。而且如果当前项目是快照版本则部署到快照仓库,否则就部署到发布仓库。
在部署到远程仓库需要用户认证的时候,就需要设置在setting.xml的service元素了,在service中的ID必须和仓库的ID保持一致。
部署是通过maven-deploy-plugin的deploy功能完成部署操作的,插件到后面细说。