type
status
date
slug
summary
tags
category
icon
password

一、Maven的配置文件

Maven 配置可以分为三种:
  • 全局配置:系统全局配置,位于 Maven的安装目录的conf子目录下面(${M2_HOME}/conf/settings.xml
  • 用户配置:当前用户的独享配置(用的比较少),位于用户目录的的.m2子目录下面({user.home}/.m2/settings.xml
  • 局部配置:当前项目的配置,位于项目目录下的 pom.xml
配置优先级:局部配置优先于全局配置。配置优先级从高到低:
pom.xml> user settings > global settings
如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。

二、Settings配置

settings.xml中的顶级元素如下所示

LocalRepository

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

InteractiveMode

表示 Maven 是否需要和用户交互以获得输入。
如果 Maven 需要和用户交互以获得输入,则设置成 true,反之则应为 false。默认为 true。

UsePluginRegistry

Maven 是否需要使用 plugin-registry.xml 文件来管理插件版本。
如果需要让 Maven 使用文件 ~/.m2/plugin-registry.xml 来管理插件版本,则设为 true。默认为 false。

Offline

表示 Maven 是否需要在离线模式下运行。
如果构建系统需要在离线模式下运行,则为true,默认为false。
当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。

PluginGroups

当插件的组织id(groupId)没有显式提供时,供搜寻插件组织 Id(groupId)的列表。
该元素包含一个 pluginGroup 元素列表,每个子元素包含了一个组织 Id(groupId)。当我们使用某个插件,并且没有在命令行为其提供组织 Id(groupId)的时候,Maven 就会使用该列表。默认情况下该列表包含了 org.apache.maven.pluginsorg.codehaus.mojo
比如我们常用的清理生命周期的 Maven 命令
其实该命令的的完整写法是
因为 pluginGroups 默认包含了组织 id org.apache.maven.plugins,所以可以简化为 mvn clean:clean ,更进一步简化为 mvn clean
又比如我们在项目中引入 mybatis-generator 插件
因为没有绑定生命周期的阶段,我们只能手动执行该插件。在未配置 pluginGroups 的时候命令格式如下:
如果在 pluginGroups 中配置了 org.mybatis.generator
那么我们可以直接使用下面命令来执行插件

Servers

进行远程服务器访问时所需的授权配置信息。
仓库信息可以在 pom.xml 文件中的 repositoriesdistributionManagement 元素中配置的。然而,一般类似用户名、密码、证书等信息不应该在 pom.xml 文件中配置,这些信息可以配置在 settings.xml中,通过唯一的 server id 进行唯一关联。

Mirrors

配置镜像列表。
mirrorOf 是核心元素,表示要替换的 repositoryid。例如我们要设置了一个 Maven 中央仓库 http://repo.maven.apache.org/maven2/ 的镜像,就需要将该元素设置成 central ,这必须和中央仓库的 id 完全一致。
mirrorOf 的常见语法如下:
  • <mirrorOf>*</mirrorOf>:匹配所有远程仓库。意味着着所有向远程仓库的请求都会被拦截,重定向到mirror里配置的地址。
  • <mirrorOf>external:*</mirrorOf>: 匹配除 localhost、使用 file:// 协议外的所有远程仓库。
  • <mirrorOf>repo1,repo2</mirrorOf> :匹配仓库 repo1 和 repo2,使用逗号分隔多个远程仓库。
  • <mirrorOf>*,!repo1</miiroOf> :匹配所有远程仓库,repo1 除外(使用感叹号将仓库从匹配中排除)。
多个 mirror 的匹配顺序:
  • 多个 mirror 按照 id 字母顺序进行排列,与编写顺序无关
  • 在第一个 mirror 找不到 artifact,不会继续找下一个镜像
  • 只有当 mirror 无法链接的时候,才会尝试找下一个镜像,类似容灾备份
镜像 mirror 和仓库 repository 的关系
  • 仓库repositorysetting.xmlprofile 元素或者 pom.xmlrepository 元素里面设置。如果单独设置两个 repository ,他们之间可能没有任何关系。
  • 镜像 mirror 在 mirror 元素里面设置 。如果使用 mirror 来表示两个 repository 之间互为镜像关系,那用户就可以清楚地知道这两个 repository 的仓库内容一致的,可能是某个 repository 访问速度较慢,所以替换成他的镜像仓库。
仓库和镜像优先级如下:
mirror(setting.xml)> repository(pom.xml)> repository(setting.xml)

Proxies

用来配置代理。

Profiles

构建方法的配置清单, maven 将根据不同环境参数来使用这些构建配置。 settings.xml 中的 profile 元素是 pom.xmlprofile 元素的裁剪版本,只包含了id, activation, repositories, pluginRepositoriesproperties 五个元素。
只包含这五个子元素是因为 setting.xml 只关心构建系统这个整体(这正是 settings.xml 文件的角色定位),而非单独的项目对象模型设置。如果一个 settings 中的 profile 被激活,它的值会覆盖任何其它定义在 POM 中或者 profile.xml 中的带有相同 idprofile
profile 需要进行激活才能启用,有三种激活方式。
  • 通过 activeProfile 指定 profileid激活。
  • 通过 activation 匹配条件激活。详细参考下面 activation 用法。
  • 通过命令行激活。mvn -P test 通过-P 并指定 profileid 即可在运行构建时激活指定id 的 profile。
如果 profile 被激活,它的值会覆盖任何其它定义在 pom.xml中或 profile.xml中的相同 id 的 profile

activation

自动触发 profile 的条件逻辑。 如 pom.xml 中的 profile一样,profile 的作用在于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过 activation元素指定。
在 maven 项目的 pom.xml 所在目录下执行 mvn help:active-profiles 命令可以查看中央仓储的 profile 是否在工程中生效。

properties

对应 profile 的扩展属性列表。同 pom.xmlproperties 元素的使用方式一致,相较于 pom.xml 是项目全局的属性配置。 这些属性配置可以在 pom.xml 中的任何地方使用标记 ${X} 来使用,这里 X 是指属性的名称。属性有五种不同的形式。
如果该 profile 被激活,则可以在pom.xml中使用 ${user.install}

repositories

远程仓库列表。上面谈到的 mirror 镜像拦截的源 repository 仓库就是在这里设置,mirror 的 mirrorOf 元素值和 repository 的 id 值保持一致。

pluginRepositories

插件的远程仓库列表。和 repository 类似,只是 repository 是管理 jar 包依赖的仓库,pluginRepositories 则是管理插件的仓库。 maven 插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories 元素的结构和 repositories 元素的结构类似。每个 pluginRepository 元素指定一个寻找新插件的远程地址。

ActiveProfiles

手动激活 profiles 的列表,按照 profile 被应用的顺序定义 activeProfile。 该元素包含了一组 activeProfile 元素,每个 activeProfile 都含有一个 profile id。任何在 activeProfile 中定义的 profile id,不论环境设置如何,其对应的 profile 都会被激活。如果没有匹配的 profile,则什么都不会发生。 例如,env-test 是一个 activeProfile,则在 pom.xml(或者 profile.xml)中对应 idprofile 会被激活。如果运行过程中找不到这样一个 profile,Maven 则会像往常一样运行。

参考

Maven系列:项目Pom配置Maven系列:仓库、镜像和私服
mcbilla
mcbilla
一个普通的干饭人🍚
Announcement
type
status
date
slug
summary
tags
category
icon
password
🎉欢迎来到飙戈的博客🎉
-- 感谢您的支持 ---
👏欢迎学习交流👏