maven中mirror镜像和repository仓库配置

maven仓库和镜像配置

  • 1. 名词解释
  • 2. reportsitory仓库配置
  • 3. mirror镜像配置
  • 4. mirror与reporsitory
    • 4.1 mirror与reporsitory的关系
    • 4.2 mirrorOf的作用

1. 名词解释

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

2. reportsitory仓库配置

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

    <repositories>
        <repository>
            <id>pentaho-publicid>
            <name>Pentaho Publicname>
            <url>https://nexus.pentaho.org/content/groups/omniurl>
            <releases>
                <enabled>trueenabled>
                <updatePolicy>alwaysupdatePolicy>
            releases>
            <snapshots>
                <enabled>trueenabled>
                <updatePolicy>alwaysupdatePolicy>
            snapshots>
        repository>
    repositories>

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

3. mirror镜像配置

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

<mirror>
  <id>aliyunmavenid>
  <mirrorOf>*mirrorOf>
  <name>阿里云公共仓库name>
  <url>https://maven.aliyun.com/repository/publicurl>
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>aliyunmavenid>
  <mirrorOf>*,!pentaho-publicmirrorOf>
  <name>阿里云公共仓库name>
  <url>https://maven.aliyun.com/repository/publicurl>
mirror>

你可能感兴趣的:(maven,maven,java,服务器)