Maven仓库与镜像配置

一、Repository(仓库)

img

手动下载jar包web地址

https://mvnrepository.com/

https://search.maven.org/

1.1 Maven仓库主要有2种:

  • remote repository:远程公共仓库,全世界的maven客户端都能访问到,可以用URL的形式访问
  • local repository:本地仓库

1.2 Remote Repository主要有3种:

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

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

二、Mirror

  mirror相当本地maven客户端向服务端(maven中心仓库)下载jar包或插件请求的拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。

2.1 没有配置mirror

img

2.2 配置mirror

img

  此时 B 被称为 A 的镜像。

2.3 mirrorOf标签

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

<mirrorOf>*</mirrorOf>
匹配所有远程仓库。 

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

<mirrorOf>*,!repo1\</miiroOf>
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 

三、Repository与Mirror

3.1 定义

mirror表示两个Repository之间的关系

3.2 目的

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

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

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

3.3 注意

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

四、maven私服

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

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

优点主要有:

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

img

五、Maven仓库拉取构件原理图

img

六、配置阿里云的maven仓库

1、仓库配置

在maven的settings.xml文件里的mirrors节点,添加如下镜像:

<mirror>
    <name>阿里云私服</name>
    <!--唯一标识-->
    <id>aly</id>  
    <!--要拦截的仓库唯一标识-->
    <mirrorOf>central</mirrorOf>
	<!--重定向后的仓库地址-->
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror>

或者直接在profiles---->>>profile---->>>repositories节点,添加如下子节点:

<repository>
    <name>阿里云私服n</name>
    <id>aly</id>
    <layout>default</layout>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <!--配置不允许下载快照版依赖-->
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <!--配置允许下载稳定版本依赖-->
    <releases>
        <enabled>true</enabled>
    </releases>
</repository>

Maven镜像地址大全

阿里的镜像地址

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

华为的镜像地址

<mirror>
<id>huaweicloud</id>
<name>mirror from maven huaweicloud</name>
<url>http://repo.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>

使用华为Maven中央仓库时,需要在servers节点增加一个server子节点,内容如下:

<server>
<id>huaweicloud</id>
<username>anonymous</username>
<password>devcloud</password>
</server>

repo1.maven.org 镜像地址

<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>

JBoos 镜像地址

<mirror>
<id>jboss-public-repository-group</id>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
posted @ 2022-03-19 23:12  黄河大道东  阅读(2801)  评论(0编辑  收藏  举报