目录
一. 前言
二. settings.xml 文件详解
2.1. 配置节点详解
2.2. 实例详解
三. mirrorOf 详解
Maven是一个流行的Java项目构建工具,它使用pom.xml文件来定义项目的配置和依赖关系。然而,Maven还提供了另一个重要的文件——setting.xml文件,用于配置Maven本身的行为。在本文中,我们将深入介绍setting.xml文件的作用和常见的配置选项。
关于Maven的详细介绍请参见《Maven 从入门到精通》。
直接修改安装包下 setting.xml 文件,就能在机器上全局地定制 Maven 的行为。一般情况下,我们更偏向于复制该文件至 ~/.m2/ 目录下(~表示用户目录;在Linux或Mac OS X中,它的默认位置是 ~/.m2/settings.xml,在Windows系统中,它的默认位置是%USER_HOME%.m2\settings.xml),然后修改该文件,在用户范围定制 Maven 的行为。Maven运行时,先找用户目录 .m2 文件夹的 settings.xml,没有的话去安装包里面找全局的settings.xml。
实际应用中,经常使用的是
配置节点 | 默认值 | 说明 |
---|---|---|
localRepository | /path/to/local/repo | 本地仓库 |
interactiveMode | true | Maven是否需要和用户交互以获得输入。 |
usePluginRegistry | false | Maven是否需要使用plugin-registry.xml文件来管理插件版本。 |
offline | false | Maven是否需要在离线模式下运行。 |
pluginGroups | 当插件的组织Id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。 | |
pluginGroups.pluginGroup | plugin的组织Id(groupId) | |
proxies | 配置代理节点 | |
proxies.proxy | 具体代理节点 | |
proxies.proxy.id | optional | 代理的唯一定义符,用来区分不同的代理元素。 |
proxies.proxy.active | true | 是否激活 |
proxies.proxy.protocol | http | 代理的协议 |
proxies.proxy.username | proxyuser | 代理的用户名 |
proxies.proxy.password | proxypass | 代理的密码 |
proxies.proxy.host | proxy.host.net | 代理的主机名 |
proxies.proxy.port | 80 | 代理的端口 |
proxies.proxy.nonProxyHosts | local.net|some.host.com | 不该被代理的主机名列表。 |
servers | 服务端配置节点 | |
servers.server | 具体的服务端配置 | |
servers.server.id | deploymentRepo | server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 |
servers.server.username | repouser | 鉴权用户名 |
servers.server.password | repopwd | 鉴权密码 |
servers.server.privateKey | /path/to/private/key | 鉴权时使用的私钥位置。 |
servers.server.passphrase | optional; leave empty if not used. | 鉴权时使用的私钥密码。 |
servers.server.filePermissions | 文件被创建时的权限。 | |
servers.server.directoryPermissions | 目录被创建时的权限。 | |
servers.server.configuration | 传输层额外的配置项。 | |
mirrors | 镜像列表 | |
mirrors.mirror | 具体的镜像节点 | |
mirrors.mirror.id | mirrorId | 镜像id |
mirrors.mirror.name | Human Readable Name for this Mirror. | 镜像名称 |
mirrors.mirror.url | 镜像的URL | |
mirrors.mirror.mirrorOf | repositoryId | 被镜像的服务器的id |
profiles | 根据环境参数来调整构建配置的列表。 | |
profiles.profile | 具体的环境配置节点 | |
profiles.profile.id | 该配置的唯一标识符。 | |
profiles.profile.activation | 自动触发profile的条件逻辑。 | |
profiles.profile.activation.jdk | 1.8 | activation有一个内建的java版本检测,如果检测到jdk版本与期待的一样,profile被激活。 |
profiles.profile.activation.property | 如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。 | |
profiles.profile.activation.property.name | target-env | 激活profile的属性的名称 |
profiles.profile.activation.property.value | dev | 激活profile的属性的值 |
profiles.profile.repositories | 远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目。 | |
profiles.profile.repositories .repository |
具体的远程仓库节点 | |
profiles.profile.repositories .repository.id |
远程仓库唯一标识 | |
profiles.profile.repositories .repository.name |
远程仓库名称 | |
profiles.profile.repositories .repository.url |
远程仓库URL | |
profiles.profile.repositories .repository.layout |
default | 用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。 |
profiles.profile.repositories .repository.snapshotPolicy |
always | |
profiles.profile.properties | 对应profile的扩展属性列表。 | |
profiles.profile.properties.tomcatPath | 如果这个profile被激活,那么属性${user.install}就可以被访问了 | |
activeProfiles | alwaysActiveProfile | 手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。 |
activeProfiles.activeProfile | 具体的激活profile |
usr/local/maven
true
false
false
org.codehaus.mojo
myproxy
true
http://…
proxy.somewhere.com
8080
proxyuser
somepassword
*.google.com|ibiblio.org
server001
my_login
my_password
${usr.home}/.ssh/id_dsa
some_passphrase
664
775
planetmirror.com
PlanetMirror Australia
http://downloads.planetmirror.com/pub/maven2
central
test
false
1.8
Windows 10
Windows
x86
5.1.2600
mavenVersion
2.0.3
/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
usr/local/winner/jobs/maven-guide
codehausSnapshots
Codehaus Snapshots
false
always
warn
http://snapshots.maven.codehaus.org/maven2
default
env-test
mirrorOf 可以理解“为某个仓库(repository)的做镜像”,填写的是repostoryId。* 的意思就是匹配所有的仓库(repository)。相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
在maven中配置一个mirror时,有多种形式:
1. mirrorOf=“*” // mirror一切,你配置的repository不起作用了。
2. mirrorOf=my-repo-id // 镜像my-repo-id,你配置的my-repo-id仓库不起作用了。
3. mirrorOf=*,!my-repo-id // !表示非运算,排除你配置的my-repo-id仓库,其他仓库都被镜像了。就是请求下载my-repo-id的仓库的jar不使用mirror的url下载,其他都是用mirror配置的url下载。
4. mirrorOf=external:* // 如果本地库存在就用本地库的,如果本地没有,所有下载就用mirror配置的url下载。