Maven:mirror和repository 区别

本文探讨了Maven中mirror与repository的区别。mirror是镜像,用于提高资源下载速度,尤其是在访问国外仓库缓慢时。repository是仓库,用于存放项目依赖。maven会按顺序检查本地仓库、中央仓库和远程仓库。mirror可以替代特定repository,通过mirrorOf属性实现针对性的请求转发,如拦截所有远程请求或指定仓库请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、为什么不理解这两者的区别?

# 授之以鱼,不如授之以渔。#
很多时候我们不懂陌生的东西,主要还是对这两者本身的功能属性不了解,才会出现根本看不懂区别在哪,所以问题需要看本质。可以从以下几个步骤入手:
(1)字面意思
mirror:镜像,我们开发过程中见到非常多镜像场景,比如经常会看到国外的一些网站访问很慢,我们回去清华或者阿里之类的镜像网站去下载对应资源,到这里应该就比较好理解了。
repository:仓库,只要使用maven的人,对于仓库的概念应该不会陌生,我们开发经常需要依赖非常多的一些第三方包,这个时候,不可能在每个项目模块中添加对应的仓库地址,太过冗余,最简单的办法是在本地的setting配置中统一添加本地仓库、中央仓库和远程仓库;
关于概念,说句实在话,对于这种广泛使用的工具,个人感觉用词非常贴切,所以呢,重要的事情说三遍。官方文档!官方文档!官方文档!
在这里插入图片描述
(2)经验
关于这一点,可能确实依赖平时经验总结,比如上面官方文档提到的,如果你不想或者不敢修改你原有配置的时候,就可以使用镜像的方式去指定替代前面repository中定义的具体仓库,也就是上面中定义的具体名称的仓库。
(3)扩展
能不能有针对性的对我某些repository进行镜像转发请求呢,即我定义了多个远程仓库(由<repositories/>定义),只转发我指定的远程仓库的依赖包的下载请求呢?再仔细想想,其实很简单,具体下面描述。

二、具体原理是怎么样的?

介绍前需要先说明一下maven第三方依赖管理的大致逻辑:

  • 步骤一:优先查询本地仓库地址是否存在,不存在,继续;
  • 步骤二:从配置的center repository 下载,没找到,继续;
  • 步骤三,依次从配置的<repositories>下配置的一个或者多个远程仓库下载,如果均请求不到,就会报错了;

根据我们上面思考的扩展点,查看官方文档:
在这里插入图片描述

<mirrorOf>属性用法示例:

  • * = everything 拦截所有 <repositories>下配置的远程下载请求。
  • external:* = everything not on the localhost and not file based. 拦截所有本地没有且 <repositories>未配置的请求,换句话说,就是前面都查过,但是查不到的情况下,还会继续从<mirror>中定义的url下载。
  • repo,repo1 = repo or repo1 拦截指定 <repositories>名称的远程地址请求,从<mirror>中定义的url下载。
    *,!repo1 = everything except repo1 拦截除了 <repositories>名称为repo1的远程地址请求,其他均从<mirror>中定义的url下载。

setting.xml文件的其他属性,官方文档都有详细的说明和示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值