maven中mirror镜像和repository仓库配置

Posted 阿拉的梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven中mirror镜像和repository仓库配置相关的知识,希望对你有一定的参考价值。

1. 名词解释

repository: 仓库,存放jar的具体位置;
mirror: 镜像,为仓库做代理,加速仓库中jar的下载,其实就是把把访问仓库的请求转发到了镜像指定的地址;

2. reportsitory仓库配置

我们一般在pom.xml中会见到下面配置:

    <repositories>
        <repository>
            <id>pentaho-public</id>
            <name>Pentaho Public</name>
            <url>https://nexus.pentaho.org/content/groups/omni</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

这是在项目的pom.xml中配置了一个仓库,仓库的id是pentaho-public,注意仓库地址,并不是常用地址,说明项目中有些包在常用仓库是下载不到的,需要到这个指定仓库去下载。

3. mirror镜像配置

在maven的settings.xml中,我们一般这样配置:

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

使用阿里云的镜像仓库来加速,一般情况下,这样是没有毛病的。
接着往下看

4. mirror与reporsitory

上面配置,乍一看没毛病,但是,你会发现无论你怎么刷新maven,都拉不到pentaho-public里的jar包。

这是因为阿里云公共仓库中没有pentaho-public里的jar包。

有人说,pom.xml中不是配置了reporsitory吗,应该先从这里拉取。

这是不对的。

4.1 mirror与reporsitory的关系

mirror是reporsitory的代理。

根据上面配置,aliyunmavenpentaho-public的代理,所以,访问https://nexus.pentaho.org/content/groups/omni的请求都被代理到了阿里云。阿里云没有这些jar包,所以,拉不下来。

那咋整呢?看下面

4.2 mirrorOf的作用

镜像配置中有这么一条

<mirrorOf>*</mirrorOf>

先看字面意思,mirrorOf 就是 mirror of ,翻译过来就是谁的镜像。

谁的呢?*的。大家应该能理解,星号代表所有。

所有的什么呢?所有的仓库,也就是reporsitory,那么这些repository当然包括我们自己配置的pentaho-public仓库。

既然如此,我们把mirrorOf的值改一下就行了。

mirrorOf的配置方法:

mirrorOf=*  //刚才说过,mirror代理所有,你配置的repository中的地址就不起作用了

mirrorOf=pentaho-public //mirror只代理pentaho-public,你配置pentaho-public仓库的地址不起作用了。但对你配置的其他仓库没有影响,其他仓库也不会使用这个mirror来加速。

mirrorOf=*,!pentaho-public  //!表示非运算,排除你配置的pentaho-public仓库,其他仓库都被镜像代理了。就是请求下载pentaho-public的仓库的jar不使用mirror的url下载,其他都是用mirror配置的url下载

mirrorOf=external:*  //如果本地库存在就用本地库的,如果本地没有所有下载就用mirror配置的url下载

因此上面的问题我们就可以这样解决了:

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*,!pentaho-public</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

以上是关于maven中mirror镜像和repository仓库配置的主要内容,如果未能解决你的问题,请参考以下文章

Maven的Mirror和Repository

maven镜像

最快的 maven repository--阿里镜像仓库

最快的 maven repository--阿里镜像仓库

IDEA自带maven报错maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories解决

4Maven的配置中mirror和repository的区别与联系