Maven的<Mirror>的详细说明

maven仓库的执行顺序:

  • settings_mirror 的优先级高于 central
  • settings_profile_repo 优先级高于 settings_mirror
  • settings_profile_repo 优先级高于 pom_repositories
  • settings_profile_repo 优先级高于 pom_profile_repo
  • pom_profile_repo 优先级高于 pom_repositories
  • pom_repositories 优先级高于 settings_mirror

通过上面的比较得出完整的搜索链:

local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central

注 :

0、多个mirror会按照顺序执行;第一个没有jar包或者mirrorOf没拦住,才会执行第二个;

1、在mirrorOf与repositoryId相同的时候优先是使用mirror的地址

2、mirrorOf等于*的时候覆盖所有repository配置

3、存在多个mirror配置的时候mirrorOf等于*放到最后,如果多个*,那就按照顺序执行;

4、只配置mirrorOf为central的时候可以不用配置repository

 

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仓库示意图

 

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在Nexus上配置本地Maven仓库,需要执行以下步骤: 1. 安装Nexus 首先需要在你的机器上安装Nexus。你可以从官方网站下载Nexus并按照说明进行安装。 2. 创建本地仓库 在Nexus中创建一个本地仓库,用于存储你的Maven构件。在Nexus的主页中,选择“Repositories”选项卡,然后单击“Create Repository”按钮。在弹出的对话框中,选择“Maven(Hosted)”类型,并填写相应的信息,如仓库名称、仓库ID等。 3. 配置MavenMaven的settings.xml文件中,添加以下配置: ``` <mirrors> <mirror> <id>nexus</id> <url>http://<nexus_host>:<nexus_port>/repository/<repository_id>/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 其中,`<nexus_host>`和`<nexus_port>`是Nexus的主机名和端口号,`<repository_id>`是步骤2中创建的本地仓库ID。 除此之外,还需要在`<servers>`标签中添加Nexus的认证信息: ``` <server> <id>nexus</id> <username>admin</username> <password>admin123</password> </server> ``` 其中,`<id>`的值应该与步骤2中创建的本地仓库ID相同,`<username>`和`<password>`分别是Nexus的管理员用户名和密码。 4. 构建项目 现在你可以使用Maven构建项目,并将构件发布到本地仓库中。在Maven的pom.xml文件中,添加以下配置: ``` <distributionManagement> <repository> <id>nexus</id> <url>http://<nexus_host>:<nexus_port>/repository/<repository_id>/</url> </repository> </distributionManagement> ``` 其中,`<id>`和`<url>`的值同样应该与步骤2中创建的本地仓库ID和URL相同。 5. 使用本地仓库 现在你可以在Maven项目中使用本地仓库中的构件。在pom.xml文件中,添加以下配置: ``` <repositories> <repository> <id>nexus</id> <url>http://<nexus_host>:<nexus_port>/repository/<repository_id>/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> ``` 其中,`<id>`、`<url>`和`<releases>`、`<snapshots>`的值同样应该与步骤2中创建的本地仓库ID和URL相同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值