settings.xml

可能存在的两个地方,前一种设置称为全局设置,后一种设置称为用户设置。如果两个文件都存在,它们的内容将被合并,以用户特定的settings.xml为主。

  1. MAVEN的安装位置: ${maven.home}/conf/settings.xml
  2. 用户的文件夹: ${user.home}/.m2/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/><!-- 本地存储库的路径。默认值是${user.home}/.m2/repository -->
    <interactiveMode/><!-- 如果为true,说明Maven试图与用户进行输入交互。默认值为true -->
    <offline/><!-- 脱机模式下运行,默认为false。如果无法连接网络,设置为false -->
    <pluginGroups/><!-- 插件组 -->
    <servers/><!-- 服务器信息 -->
    <mirrors/><!-- 镜像 -->
    <proxies/><!-- 代理 -->
    <profiles/><!-- 配置文件 -->
    <activeProfiles/><!-- 需要激活配置文件 -->
</settings>

localRepository

<localRepository>G:\maven</localRepository>

包括三种仓库

  • 本地仓库(local):.m2/respository/
  • 中央仓库(central):Maven 社区提供的仓库
  • 远程仓库(remote):其他远程仓库

仓库读取顺序
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)

servers

访问远程服务器需要的信息

<servers>
    <server>
      <id>server001</id><!-- 这是服务器的ID(而不是登录的用户的ID),它与Maven试图连接的存储库/镜像的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

当觉得国外服务器慢的时候,可以用镜像,比如阿里的。镜像的优先级大于仓库。Maven不会聚合镜像,而只是选择第一个匹配。如果希望提供多个存储库,请使用存储库管理器。

<mirrors>
    <mirror>
      <id>planetmirror.com</id><!-- 镜像的id,如果与server的id一样,说明用该server的配置信息连接此镜像 -->
      <name>PlanetMirror Australia</name><!-- 镜像的名称 -->
      <url>http://downloads.planetmirror.com/pub/maven2</url><!-- 镜像的地址 -->
      <mirrorOf>central</mirrorOf><!-- 被镜像存储库的服务器ID,这必须与镜像id不匹配。 -->
    </mirror>
</mirrors>

根据mirrorOf匹配规则如下:

  • = 匹配所有远程仓库
  • external:* = 匹配除 localhost、使用 file:// 协议外的所有远程仓库
  • repo,repo1:* = 匹配仓库 repo1 和 repo2,central代表替换中央仓库
  • ,!repo1: = 匹配所有远程仓库, 但不包括 repo1

Proxies

代理

<proxies>
    <proxy>
      <id>myproxy</id><!-- 代理的id -->
      <active>true</active><!-- true说明这个代理是激活的 -->
      <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

配置文件,每个profile由activation, repositories, pluginRepositories和properties组成

activation

当所有指定的条件都满足时,激活就会发生,尽管不是所有的条件都需要同时满足

<activation>
    <activeByDefault>false</activeByDefault><!-- 是否激活 -->
    <jdk>1.5</jdk><!-- JDK检测 -->
    <os><!-- 操作系统检测 -->
      <name>Windows XP</name><!-- 操作系统 -->
      <family>Windows</family><!-- 操作系统家族 -->
      <arch>x86</arch><!-- 操作系统 -->
      <version>5.1.2600</version><!-- 操作系统版本 -->
    </os>
    <property><!-- 如果Maven检测到对应的name和value,则配置文件将被激活 -->
      <name>mavenVersion</name>
      <value>2.0.3</value>
    </property>    
    <file><!-- 根据文件存在/不存在激活profile -->
      <!-- 根据文件存在激活profile -->
      <exists>${basedir}/file2.properties</exists>
      <!-- 根据文件不存在激活profile -->
      <missing>${basedir}/file1.properties</missing>
    </file>
</activation>

properties

值占位符

<properties>
    <user.install>${user.home}/our-project</user.install>
</properties>

repositories

远程仓库集合

<repositories>
    <repository>
      <id>codehausSnapshots</id><!-- 远程仓库id -->
      <name>Codehaus Snapshots</name><!-- 远程仓库名称 -->
      <releases>
        <enabled>false</enabled><!-- 是否提供下载 -->
        <updatePolicy>always</updatePolicy><!-- 构建时检查频率,always总是, daily (default)一天只检查一次, interval:X距离上次多少分钟才检查 , never从不检查 -->
        <checksumPolicy>warn</checksumPolicy> <!-- Maven验证artifact校验文件缺少或不正确采取的策略:ignore忽略, fail失败,warn警告 -->
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <url>http://snapshots.maven.codehaus.org/maven2</url><!-- 远程仓库地址 -->
      <layout>default</layout><!-- default or legacy,布局:默认还是遗留 -->
    </repository>
  </repositories>
<pluginRepositories>

ActiveProfiles

直接激活配置

<activeProfiles>
    <activeProfile>env-test</activeProfile>
</activeProfiles>

大军
847 声望183 粉丝

学而不思则罔,思而不学则殆