1. settings.xml的作用
它是用来设置Maven参数的配置文件。并且,settings.xml是Maven的全局配置文件。settings.xml中包含类似本地仓库、远程仓库和联网使用的代理信息等配置。
2. maven/conf/settings.xml & 用户目录/.m2/settings.xml
Maven目录的conf中的settings.xml和用户目录的.m2子目录下面的settings.xml的同时存在的时候,用户目录下面的settings.xml中的定义会覆盖Maven/conf目录下面的settings.xml中的定义。用户目录下的settings.xml不存在则可以自己拷贝一份Maven自带的配置后修改成自定义配置后自动覆盖Maven配置。
3. 配置示例及说明
<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明范式 -->
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- 本地仓库路径(默认注掉,使用用户目录的.m2目录) -->
<localRepository>D:\repository</localRepository>
<!-- 表示maven是否需要和用户交互以获得输入,如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。 -->
<interactiveMode>true</interactiveMode>
<!-- 在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息,默认false -->
<offline>false</offline>
<!-- maven是否需要使用plugin-registry.xml文件来管理插件版本 -->
<usePluginRegistry>false</usePluginRegistry>
<!-- 当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表,默认包含:org.apache.maven.plugins和org.codehaus.mojo -->
<pluginGroups>
<!--plugin的组织Id(groupId) -->
<pluginGroup>org.codehaus.mojo</pluginGroup>
</pluginGroups>
<!-- 配置服务端 -->
<servers>
<!-- server元素包含服务器配置信息,默认注掉 -->
<server>
<!-- server id -->
<id>releases</id>
<!-- 用户名 -->
<username>admin</username>
<!-- 密码 -->
<password>123456</password>
<!-- 鉴权时使用的私钥位置 -->
<privateKey>C:\Users\Administrator\.m2\key</privateKey>
<!-- 鉴权时使用的私钥密码。 -->
<passphrase>some_passphrase</passphrase>
<!-- Linux系统中文件被创建时的权限 -->
<filePermissions>664</filePermissions>
<!-- Linux系统中目录被创建时的权限。 -->
<directoryPermissions>775</directoryPermissions>
</server>
</servers>
<!-- mirrors定义一系列的远程仓库的镜像 -->
<mirrors>
<!-- Maven*仓库地址 -->
<!-- 搜索地址:https://mvnrepository.com/ 或 https://search.maven.org/ -->
<mirror>
<!-- id:镜像唯一标识 -->
<id>central</id>
<!-- 镜像名称 -->
<name>Maven Repository Switchboard</name>
<!-- 该镜像的URL -->
<url>https://repo1.maven.org/maven2/</url>
<!-- 或者使用地址2:<url>http://repo.maven.apache.org/maven2</url> -->
<!-- mirrorOf:被镜像的服务器的id,central表示代替官方的*库 -->
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 阿里仓库 -->
<!-- 搜索地址:https://developer.aliyun.com/mvn/guide -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 腾讯云Maven镜像 -->
<!-- 地址:https://mirrors.tencent.com/help/maven.html -->
<mirror>
<id>nexus-tencentyun</id>
<name>Nexus tencentyun</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<!-- 华为Maven镜像 -->
<mirror>
<id>huaweicloud</id>
<name>mirror from maven huaweicloud</name>
<url>https://mirror.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- repo2镜像 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<!-- ibiblio镜像 -->
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<!-- JBoos镜像 -->
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<!-- 谷歌镜像 -->
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- *仓库在中国的镜像 -->
<mirror>
<id>maven.net.cn</id>
<name>oneof the central mirrors in china</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 阿里云提供的镜像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<!-- 代理配置 -->
<proxies>
<proxy>
<!-- 代理id -->
<id>xxx</id>
<!-- 代理是否激活 -->
<active>true</active>
<!-- 代理的协议。 协议://主机名:端口 -->
<protocol>http</protocol>
<!-- 代理的主机名。协议://主机名:端口 -->
<host>127.0.0.1</host>
<!-- 代理的端口。协议://主机名:端口 -->
<port>8765</port>
<!-- 代理的用户名 -->
<username>admin</username>
<!-- 代理的密码 -->
<password>123456</password>
<!-- 不该被代理的主机名列表。该列表的分隔符由代理服务器指定,常见的是竖杠或逗号等。 -->
<nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
</proxy>
</proxies>
<!-- profiles:根据环境参数来调整构建配置的列表 -->
<!--
settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。
它包含了id、activation、repositories、pluginRepositories和 properties元素。
这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),
而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,
它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。
当所有的约束条件都满足的时候就会激活这个profile。
-->
<profiles>
<profile>
<!-- profile id -->
<id>test</id>
<!-- 扩展属性列表 -->
<properties>
</properties>
<!-- 自动触发profile的条件逻辑 -->
<activation>
<!-- profile默认是否激活的标识 -->
<activeByDefault>false</activeByDefault>
<!-- 当匹配的jdk被检测到 -->
<jdk>1.8</jdk>
<os>
<!-- 激活profile的操作系统的名字 -->
<name>Windows 10</name>
<!-- 激活profile的操作系统所属家族(如 'windows') -->
<family>Windows</family>
<!-- 激活profile的操作系统体系结构 -->
<arch>x64</arch>
<!-- 激活profile的操作系统版本 -->
<version>19042.1466</version>
</os>
<!--
property:如果Maven检测到某一个属性(其值可以在POM中通过${name}引用),
其拥有对应的name = 值,Profile就会被激活。
如果值字段是空的,那么存在属性名称字段就会激活profile,
否则按区分大小写方式匹配属性值字段
-->
<property>
<name>mavenVersion</name>
<value>2.0.3</value>
</property>
<!--
提供一个文件名,通过检测该文件的存在或不存在来激活profile。
missing检查文件是否存在,如果不存在则激活profile。
另一方面,exists则会检查文件是否存在,如果存在则激活profile
-->
<file>
<exists>${basedir}/file2.properties</exists>
<missing>${basedir}/file1.properties</missing>
</file>
</activation>
<!-- repositories:远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目 -->
<repositories>
<repository>
<id>central</id>
<name>libs-release</name>
<url>http://127.0.0.1/artifactory/libs-release</url>
<!-- 处理远程仓库里快照版本的下载 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件远程仓库列表 -->
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins</name>
<url>http://127.0.0.1/artifactory/plugins</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!-- 手动激活profiles的列表 -->
<activeProfile>test</activeProfile>
</activeProfiles>
</settings>