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.plugins
和 org.codehaus.mojo
。比如我们常用的清理生命周期的 Maven 命令
其实该命令的的完整写法是
因为
pluginGroups
默认包含了组织 id org.apache.maven.plugins
,所以可以简化为 mvn clean:clean
,更进一步简化为 mvn clean
。又比如我们在项目中引入 mybatis-generator 插件
因为没有绑定生命周期的阶段,我们只能手动执行该插件。在未配置
pluginGroups
的时候命令格式如下:如果在
pluginGroups
中配置了 org.mybatis.generator
。那么我们可以直接使用下面命令来执行插件
Servers
进行远程服务器访问时所需的授权配置信息。
仓库信息可以在
pom.xml
文件中的 repositories
和 distributionManagement
元素中配置的。然而,一般类似用户名、密码、证书等信息不应该在 pom.xml
文件中配置,这些信息可以配置在 settings.xml
中,通过唯一的 server id
进行唯一关联。Mirrors
配置镜像列表。
mirrorOf
是核心元素,表示要替换的 repository
的 id
。例如我们要设置了一个 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
的关系
- 仓库
repository
在setting.xml
的profile
元素或者pom.xml
的repository
元素里面设置。如果单独设置两个repository
,他们之间可能没有任何关系。
- 镜像 mirror 在
mirror
元素里面设置 。如果使用mirror
来表示两个repository
之间互为镜像关系,那用户就可以清楚地知道这两个repository
的仓库内容一致的,可能是某个repository
访问速度较慢,所以替换成他的镜像仓库。仓库和镜像优先级如下:mirror(setting.xml)> repository(pom.xml)> repository(setting.xml)
Proxies
用来配置代理。
Profiles
构建方法的配置清单,
maven
将根据不同环境参数来使用这些构建配置。
settings.xml
中的 profile
元素是 pom.xml
中 profile
元素的裁剪版本,只包含了id
, activation
, repositories
, pluginRepositories
和 properties
五个元素。只包含这五个子元素是因为
setting.xml
只关心构建系统这个整体(这正是 settings.xml
文件的角色定位),而非单独的项目对象模型设置。如果一个 settings
中的 profile
被激活,它的值会覆盖任何其它定义在 POM
中或者 profile.xml
中的带有相同 id
的 profile
。profile
需要进行激活才能启用,有三种激活方式。- 通过
activeProfile
指定profile
的id
激活。
- 通过
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.xml
中 properties
元素的使用方式一致,相较于 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
)中对应 id
的 profile
会被激活。如果运行过程中找不到这样一个 profile
,Maven 则会像往常一样运行。参考
- Author:mcbilla
- URL:http://mcbilla.com/article/8e3efbaa-6a5d-4a9c-8c3b-ab321f76782e
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts