目录
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 |
- "1.0" encoding="UTF-8"?>
- <settings xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
-
-
- <localRepository>usr/local/mavenlocalRepository>
-
-
- <interactiveMode>trueinteractiveMode>
-
-
-
-
- <usePluginRegistry>falseusePluginRegistry>
-
-
-
- <offline>falseoffline>
-
-
-
-
-
- <pluginGroups>
-
-
- <pluginGroup>org.codehaus.mojopluginGroup>
-
- pluginGroups>
-
-
- <proxies>
-
-
- <proxy>
-
-
- <id>myproxyid>
-
-
- <active>trueactive>
-
-
- <protocol>http://…protocol>
-
-
- <host>proxy.somewhere.comhost>
-
-
- <port>8080port>
-
-
- <username>proxyuserusername>
-
-
- <password>somepasswordpassword>
-
-
- <nonProxyHosts>*.google.com|ibiblio.orgnonProxyHosts>
-
- proxy>
-
- proxies>
-
-
- <servers>
-
-
- <server>
-
-
- <id>server001id>
-
-
- <username>my_loginusername>
-
-
- <password>my_passwordpassword>
-
-
-
- <privateKey>${usr.home}/.ssh/id_dsaprivateKey>
-
-
- <passphrase>some_passphrasepassphrase>
-
-
-
- <filePermissions>664filePermissions>
-
-
- <directoryPermissions>775directoryPermissions>
-
-
- <configuration>configuration>
-
- server>
-
- servers>
-
-
- <mirrors>
-
-
- <mirror>
-
-
- <id>planetmirror.comid>
-
-
- <name>PlanetMirror Australianame>
-
-
- <url>http://downloads.planetmirror.com/pub/maven2url>
-
-
-
- <mirrorOf>centralmirrorOf>
-
- mirror>
-
- mirrors>
-
-
-
-
-
- <profiles>
-
-
- <profile>
-
-
- <id>testid>
-
-
-
-
-
- <activation>
-
-
- <activeByDefault>falseactiveByDefault>
-
-
- <jdk>1.8jdk>
-
-
- <os>
-
-
- <name>Windows 10name>
-
-
- <family>Windowsfamily>
-
-
- <arch>x86arch>
-
-
- <version>5.1.2600version>
-
- os>
-
-
-
- <property>
-
-
- <name>mavenVersionname>
-
-
- <value>2.0.3value>
-
- property>
-
-
-
- <file>
-
-
- <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/exists>
-
-
- <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/missing>
-
- file>
-
- activation>
-
-
-
-
-
-
-
-
-
- <properties>
-
-
- <user.install>usr/local/winner/jobs/maven-guideuser.install>
-
- properties>
-
-
- <repositories>
-
-
- <repository>
-
-
- <id>codehausSnapshotsid>
-
-
- <name>Codehaus Snapshotsname>
-
-
- <releases>
-
-
- <enabled>falseenabled>
-
-
-
- <updatePolicy>alwaysupdatePolicy>
-
-
-
- <checksumPolicy>warnchecksumPolicy>
-
- releases>
-
-
-
- <snapshots>
-
- <enabled />
- <updatePolicy />
- <checksumPolicy />
-
- snapshots>
-
-
- <url>http://snapshots.maven.codehaus.org/maven2url>
-
-
-
- <layout>defaultlayout>
-
- repository>
-
- repositories>
-
-
-
-
- <pluginRepositories>
-
-
- <pluginRepository>
- <releases>
- <enabled />
- <updatePolicy />
- <checksumPolicy />
- releases>
-
- <snapshots>
- <enabled />
- <updatePolicy />
- <checksumPolicy />
- snapshots>
-
- <id />
- <name />
- <url />
- <layout />
- pluginRepository>
-
- pluginRepositories>
-
- profile>
-
- profiles>
-
-
-
-
-
- <activeProfiles>
-
- <activeProfile>env-testactiveProfile>
-
- activeProfiles>
-
- settings>
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下载。