• 概念--Maven仓库


    转:Maven:mirror和repository 区别

    Tip:

    默认中央仓库的地址:https://repo.maven.apache.org/maven2

    1、Maven仓库主要有2种

    • remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问

    • local repository:存放在本地磁盘的一个文件夹,例如,windows上默认是C:Users{用户名}.m2 epository目录

      Remote Repository主要有3种

    • 中央仓库https://repo.maven.apache.org/maven2

    • 私服:内网自建的maven repository,其URL是一个内部网址 

    • 其他公共仓库:其他可以互联网公共访问maven repository,例如阿里云、 jboss repository等

    repository里存放的都是各种jar包和maven插件。

    2、Maven搜索依赖的顺序就是:

    1)搜索本地仓库,没有找到,就去第2步,否则退出

    2)搜索中央仓库,没有找到,就去第3步,否则退出

    3)去远程仓库获取,没有找到,就报错,否则退出

     为什么在第二、三步会搜索中央仓库,是因为在Maven源码中已经定义好了:idcentralurlhttps://repo.maven.apache.org/maven2 

    <repositories>
        <repository>
          <id>central</id>
          <name>Central Repository</name>
          <url>https://repo.maven.apache.org/maven2</url>
          <layout>default</layout>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
    
      <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <name>Central Repository</name>
          <url>https://repo.maven.apache.org/maven2</url>
          <layout>default</layout>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <releases>
            <updatePolicy>never</updatePolicy>
          </releases>
        </pluginRepository>
      </pluginRepositories>

    3、Mirror

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

    配置镜像的目的:

    • 在不配置镜像的情况下,maven默认会使用中央库.
    • maven中央库在国外,有时候访问会很慢,尤其是下载较大的依赖的时候,有时候速度会很慢,甚至会出现无法下载的情况。
    • 为了解决依赖下载速度的问题,需要配置maven国内镜像。

    3.1 没有配置mirror:

    3.2 配置mirror:

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

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

    3.3 <mirrorOf></mirrorOf> 

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

    • <mirrorOf>*</mirrorOf> 

                匹配所有远程仓库。 

    • <mirrorOf>repo1,repo2</mirrorOf> 

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

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

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


    4 Repository与Mirror

    4.1 定义

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

    4.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>即可。

    4.3  注意

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

    5 私服

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

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

  • 相关阅读:
    APP端自动化 之 Windows-Android-Appium环境搭建
    Python3学习笔记-继承、封装、多态
    Python3学习笔记-构造函数与析构函数
    多线程同时操作界面使用互斥体
    AX2009 C#客户端通过Web service批量审核工作流(一)
    AX2009报表发送邮件(二)
    AX2009报表发送邮件(一)
    AX2012分页显示数据
    AX2012 菜单根据不同公司动态显示
    AX2012使用域用户组
  • 原文地址:https://www.cnblogs.com/amunamuna/p/8462091.html
Copyright © 2020-2023  润新知