Maven 在加载配置文件时,会先加载当前用户家目录下的 .m2/settings.xml
用户配置文件,然后再去加载 Maven 安装路径下的 conf/settings.xml
全局配置文件,并且用户配置文件中的配置项优先于全局配置文件中的配置项。
在命令行中通过
-s
参数可以指定用户配置文件的路径,通过-gs
参数可以指定全局配置文件的路径。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
</settings>
本地仓库
Maven 在搜索依赖库时,会先从本地仓库中查找,如果没有找到则会去远程仓库中查找,查找成功后会下载到本地仓库中。
<!-- 默认值为${user.home}/.m2/repository。 -->
<localRepository>D:\development\Java\maven_repository</localRepository>
控制联网
Maven 在下载和部署项目需要连接网络,可以在配置文件中关闭 Maven 的联网功能。
<!-- 是否下线,默认为false,也就是允许联网。 -->
<offline>true</offline>
代理配置
Maven 在选择代理时,会优先选择系统代理或命令行代理,如果没找到的话才会使用下面配置第一个激活的代理。
<!-- 用于配置代理列表。 -->
<proxies>
<!-- 每一个proxy标签对应着一个代理配置。 -->
<proxy>
<!-- 代理的ID,必须要指定,并且必须唯一。 -->
<id>local</id>
<!-- 代理的地址,必须要指定。 -->
<host>127.0.0.1</host>
<!-- 代理的端口号,必须要指定。 -->
<port>10809</port>
<!-- 是否激活,默认为true。 -->
<active>true</active>
<!-- 连接代理时使用的通信协议,默认为http。 -->
<protocol>http</protocol>
<!-- 连接代理时使用的账号。 -->
<username>zhang</username>
<!-- 连接代理时使用的密码。 -->
<password>123456</password>
<!-- 不进行代理的主机地址,可以使用通配符,如果有多个则使用|来分隔。 -->
<nonProxyHosts>localhost|*.internal</nonProxyHosts>
</proxy>
</proxies>
通过以下命令可以设置当前终端的代理,设置的代理仅在本次终端有效。
set http_proxy=proxy.example.com:8080
set https_proxy=proxy.example.com:8080
远程仓库
Maven 在下载项目的依赖时,会去 POM 文件里定义的远程仓库中寻找并下载依赖。如果 POM 文件中没有定义任何的远程仓库,则会使用默认的中央仓库,该仓库的ID为 central
,URL为 https://repo.maven.apache.org/maven2
。
<!-- 仓库列表,Maven会按顺序去寻找依赖并下载。 -->
<repositories>
<!-- 定义一个仓库 -->
<repository>
<!-- 仓库的ID -->
<id>my-repo</id>
<!-- 仓库的URL -->
<url>https://my-repo.com/maven</url>
</repository>
</repositories>
Maven 在访问远程仓库前,会先去配置文件中查找有没有该仓库的镜像仓库,如果有的话则访问镜像仓库,而不是访问原始仓库。Maven 在匹配镜像仓库时,会根据当前仓库的 ID 去匹配。
<mirrors>
<mirror>
<!-- 当前镜像仓库的ID。 -->
<id>aliyunmaven</id>
<!-- 要镜像的仓库ID,如果有多个则用逗号分隔,也可以*来镜像所有仓库。 -->
<mirrorOf>*</mirrorOf>
<!-- 可选的,表示镜像仓库的名称。 -->
<name>阿里云公共仓库</name>
<!-- 镜像仓库的URL。 -->
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
在连接远程仓库时如果远程仓库需要认证信息,则 Maven 会根据该远程仓库的 ID 去配置文件寻找认证信息。
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>nexus私服</name>
<url>http://localhost:8081/repository/maven-central/</url>
</mirror>
</mirrors>
<!-- 配置远程仓库的认证信息 -->
<servers>
<server>
<!-- 远程仓库的ID -->
<id>nexus</id>
<!-- 远程仓库的用户名 -->
<username>admin</username>
<!-- 远程仓库的密码 -->
<password>admin</password>
</server>
</servers>