Maven的Mirror和Repository 的详细讲解

生如夏花 2017-12-20 22:39:22 5397

1 Repository(仓库)


1.1 Maven仓库主要有2种:

  • remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问
  • local repository:存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}\.m2\repository目录

1.2 Remote Repository主要有3种:

  • 中央仓库:http://repo1.maven.org/maven2/ 
  • 私服:内网自建的maven repository,其URL是一个内部网址 
  • 其他公共仓库:其他可以互联网公共访问maven repository,例如 jboss repository等

repository里存放的都是各种jar包和maven插件。当向仓库请求插件或依赖的时候,会先检查local repository,如果local repository有则直接返回,否则会向remote repository请求,并缓存到local repository。也可以把做的东西放到本地仓库,仅供本地使用;或上传到远程仓库,供大家使用。 

2 Mirror

mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。

2.1 没有配置mirror:


2.2 配置mirror:


此时,B Repository被称为A Repository的镜像。

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都胡够从它的镜像中获取。

2.3 <mirrorOf></mirrorOf> 

<mirrorOf></mirrorOf>标签里面放置的是要被镜像的Repository ID。为了满足一些复杂的需求,Maven还支持更高级的镜像配置: 

  • <mirrorOf>*</mirrorOf> 

            匹配所有远程仓库。 

  • <mirrorOf>repo1,repo2</mirrorOf> 

            匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。 

  • <mirrorOf>*,!repo1</miiroOf> 

            匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 

3 Repository与Mirror

3.1 定义

其实,mirror表示的是两个Repository之间的关系,在maven配置文件(setting.xml)里配置 了<mirrors><mirror>..........</mirror></mirrors>, 即定义了两个Repository之间的镜像关系。

3.2 目的

配置两个Repository之间的镜像关系,一般是出于访问速度和下载速度考虑。

例如, 有一个项目,需要在公司和住所都编码,并在项目pom.xml配置了A Maven库。在公司,是电信网络,访问A库很快,所以maven管理依赖和插件都从A库下载;在住所,是网通网络,访问A库很慢,但是访问B库很快。这 时,在住所的setting.xml里,只要配置一 下<mirrors><mirror>....</mirror></mirrors>,让B库成为A 库的mirror,即可不用更改项目pom.xml里对于A库的相关配置。

如果该镜像仓库需要认证,则配置setting.xml中的<server></server>即可。

3.3  注意

需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

4 私服

私服是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。

当Maven需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。

优点主要有:

  1. 节省外网宽带
  2. 加速Maven构建
  3. 部署第三方构件
  4. 提高稳定性、增强控制:原因是外网不稳定
  5. 降低中央仓库的负荷:原因是中央仓库访问量太大

PS:Maven仓库示意图



版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/168.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
上天我不能,入地我不愿,我只能徘徊于天地之间。生当夏花,死而无憾!
相关文章
MavenMirrorRepository详细讲解
Bootstrap Affix 插件 高级用法详细讲解
document.domain解决跨域问题,详细讲解
Plupload 上传详细讲解,Plupload 多实例上传,Plupload多个上传按钮
HttpClient 获取详细的头信息
BlockingQueue 方法详细描述
Ehcache配置详细解释
解JavaScript中splice()方法,有Demo详细介绍
Shiro教程,Shiro 配置文件详细解释,Shiro自定义Filter配置
对Java的常用对象(POJO、DTO、PO、BO、VO、DAO)详细解释及应用场景
最新文章
Springboot 集成Aliyun MQ消息队列,Aliyun 消息队列配置及代码实现 13
SpringBoot 集成Spring-data-redis,redis对象序列化存储 18
天气API,全国天气 JSON API接口,可以获取十五天的天气预报 57
Springboot + Freemarker 集成配置 112
DNS查询, DNS测速检查接口,DNS测速接口 24
Mysql 并发插入、存在不插入,存在更新操作 44
SOJSON 阿里云活动达到67人,最终获得5年的1核2GB的ECS服务器使用权益 39
Java 完美解析.plist & 生成plist ,Android 解析.plist 36
Java SHA1的几种实现方式,Java SHA1 签名 58
Mac下Charles-proxy 抓包工具,iPhone 抓包演示 20
最热文章
Elasticsearch教程(四) elasticsearch head 插件安装和使用 117319
Elasticsearch教程(六) elasticsearch Client创建 75920
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 72387
Elasticsearch教程(二),IK分词器安装 70275
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 64788
Elasticsearch教程(一),全程直播(小白级别) 57931
Elasticsearch教程(五) elasticsearch Mapping的创建 55847
Elasticsearch教程(三),IK分词器安装 (极速版) 55149
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 50459
Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载 43367
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...