一、Settings 配置
settings.xml 用来配置 maven 项目中的各种参数文件,包括本地仓库、远程仓库、私服、认证等信息。
全局 settings、用户 setting、pom 的区别:
- 全局 settings.xml 是 maven 的全局配置文件,一般位于 ${maven.home}/conf/settings.xml,即 maven 文件夹下的 conf 中。
- 用户 setting 是 maven 的用户配置文件,一般位于 ${user.home}/.m2/settings.xml,即每位用户都有一份配置文件。
- pom.xml 文件是项目配置文件,一般位于项目根目录下或子目录下。
配置优先级从高到低:pom.xml > 本地 settings > 全局 settings。如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。
二、maven仓库
如前言所述,我们依赖的外部服务是需要有地方进行存储的,而存储的地方就称之为仓库。其中仓库又分为本地仓库、中央仓库、镜像仓库、私服。
1、本地仓库
当项目在本地编译或运行时,直接加载本地的依赖服务无疑是最快的。默认情况下,不管在 Window 还是 Linux 下,每个用户在自己用户目录下都有一个路径名为.m2/repository/ 的仓库目录。
而原始的本地仓库是为空的,因此 maven 需要知道一个网络上的仓库,在本地仓库不存在时前往下载网络上的仓库,也就是远程仓库。
2、私服
一般来说中央仓库或者镜像仓库都能满足我们的需求,但是当我们在公司内合作开发代码时,可能因为系统保密性原因,有一些其他同事开发的外部依赖只希望能够被本公司的人使用,而如果上传到镜像仓库则保密性就不复存在了。因此私服最主要的功能时存储一些公司内部不希望被公开的依赖服务。
3、镜像仓库
总结来说,镜像仓库就是将国外的中心仓库复制一份到国内,这样一来下载速度以及访问速度都将很快。
4、中央仓库
当 maven 未配置时,会默认请求 maven 的中央仓库,中央仓库包含了这个世界上绝大多数流行的开源 java 构件,以及源码、作者信息、SCM, 信息、许可证信息等,每个月这里都会接受全世界 java 程序员大概 1 亿次的访问,它对全世界 java 开发者的贡献由此可见一斑。
但是由于最常见的例如网络原因等,国外的中央仓库使用起来并不顺利,因此就有了下载地址为国内的中央仓库,也就是镜像仓库。
三、settings 配置详解
主要配置元素:包括本地仓库(localRepository)、镜像(mirrors)、服务器(servers)、代理(proxies)、配置文件(profiles)等。
1、本地仓库地址:
<localRepository>/path/to/local/repo</localRepository>
指定Maven用来存储下载的插件和依赖的本地仓库位置。
2、远程仓库配置:
<mirrors><mirror><id>mirrorId</id><mirrorOf>repositoryId</mirrorOf><url>http://my.repository.com/repo/path</url></mirror>
</mirrors>
配置镜像仓库,用于代理远程仓库,提高下载速度或稳定性。
3、私服认证信息:
<servers><server><id>serverId</id><username>your_username</username><password>your_password</password></server>
</servers>
配置用于认证的服务器信息,比如私服的用户名和密码。
4、profile激活:
<profiles><profile><id>profileId</id><activation><activeByDefault>true</activeByDefault></activation><repositories><!-- 仓库配置 --></repositories><pluginRepositories><!-- 插件仓库配置 --></pluginRepositories></profile>
</profiles>
配置profile,根据条件激活相关配置,比如激活时机或环境变量。
5、代理服务器配置:
<proxies><proxy><id>proxyId</id><active>true</active><protocol>http</protocol><host>proxy.mycompany.com</host><port>8080</port><username>proxyuser</username><password>somepassword</password><nonProxyHosts>local.net|some.host.com</nonProxyHosts></proxy>
</proxies>
如果你处于需要通过代理服务器访问互联网的环境下,可以配置代理服务器的信息。