zoukankan      html  css  js  c++  java
  • Maven学习之 仓库镜像

    使用仓库镜像

    仓库可以声明在项目中,但有时,你可能想要使用某个仓库的镜像,而不去修改项目文件。

    使用镜像的原因:

    • 有一个同步镜像,且速度更快。
    • 想使用你自己控制的内部仓库。
    • 想运行repository manager来提供一个本地的缓存(镜像),然后使用该缓存的URL。

    为了配置给定仓库的镜像,你需要在 ${user.home}/.m2/settings.xml 中提供该新仓库的 idurl,并指定 mirrorOf 的值 -- 就是你想镜像的仓库的ID

    例如,Maven 中央美国仓库的ID默认是central,所以,想使用欧洲中央仓库的话,你可以这样配置:

    <settings>
        ...
        <mirrors>
            <mirror>
                <id>UK</id>
                <name>UK Central</name>
                <url>http://uk.maven.org/maven2</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
        </mirrors>
        ...
    </settings>

    注意,对于给定的某个仓库来说,最多只能有一个镜像。就是说,不管有几个镜像,其 <mirrorOf>的值不能重复! Maven不会聚集镜像,而是会简单的拣出第一个符合的。 如果你想提供由多个仓库组成的view,请使用一个 repository manager。

    The settings descriptor documentation can be found on the Maven Local Settings Model Website.

    注意:官方Maven 2 仓库是http://repo.maven.apache.org/maven2 位于美国,或者 http://uk.maven.org/maven2 位于英国。

    Repository Metadata 中有一个已知的镜像列表。这些镜像的内容可能不尽相同,我们(maven官方)也不会以任何形式支持它们。

    使用一个单独的仓库

    你可以强制Maven使用一个单独的仓库 -- 通过让该仓库镜像所有的仓库请求。该仓库必须包含所有需要的artifacts,或者能够代理请求到其他仓库。 当使用一个内部公司仓库时,这很有用,可以使用Maven Repository Manager来代理外部的请求。

    只需要将 <mirrorOf>的值设为 * 即可!

    注意:该功能仅支持Maven 2.0.5+。

    <settings>
        ...
        <mirrors>
            <mirror>
                <id>internal-repository</id>
                <name>Maven Repository Manager running on repo.mycompany.com</name>
                <url>http://repo.mycompany.com/proxy</url>
                <mirrorOf>*</mirrorOf>
            </mirror>
        </mirrors>
        ...
    </settings>

    高级镜像指南

    当配合repository manager时,一个单一的镜像可以处理多个仓库。

    该语法自 Maven 2.0.9 起:

    • 匹配所有的仓库id。
    • external:*  匹配所有的仓库,除了那些使用localhost 或 基于文件的仓库。当你想排除重定向仓库(用于集成测试)时,可以配合repository manager来使用。
    • ,  多个仓库可以使用逗号来拼接。
    • !  可以配合上面提到的某个通配符使用,以排除某个仓库id。

    在逗号间隔的仓库标识符列表中,通配符的位置不如 。。。(长句,懒得翻译) 重要。

    The position of wildcards within a comma separated list of repository identifiers is not important as the wildcards defer to further processing and explicit includes or excludes stop the processing, overruling any wildcard match.

    当你使用高级语法,并配置多个镜像时,请记住 它们的声明顺序不是无所谓的。当Maven查找某个仓库的镜像时,它会先检查<mirrorOf>最匹配的镜像。如果没有直接匹配的,Maven会使用第一个声明的镜像--按照上面提到的规则(如果有的话)。

    例子:

    • * 代表任意的。
    • external:* 代表任意不在localhost上的,或不是基于文件的。
    • repo,repo1 代表repo 或 repo1。
    • *,!repo1 代表任意的,但除了repo1 。

    注意,该功能仅支持 Maven 2.0.9+。

    <settings>
        ...
        <mirrors>
            <mirror>
                <id>internal-repository</id>
                <name>Maven Repository Manager running on repo.mycompany.com</name>
                <url>http://repo.mycompany.com/proxy</url>
                <mirrorOf>external:*,!foo</mirrorOf>
            </mirror>
            <mirror>
                <id>foo-repository</id>
                <name>Foo</name>
                <url>http://repo.mycompany.com/foo</url>
                <mirrorOf>foo</mirrorOf>
            </mirror>
        </mirrors>
        ...
    </settings>

    创建你自己的镜像

    中央仓库的大小是稳步增长的。 为了节省我们的带宽和你的时间,镜像整个中央仓库是不被允许的。(这样做会被自动禁止) 相反,我们建议你设置一个repository manager作为代理。

    如果你想成为一个官方镜像,请联系我们。

    官方文档链接:

    http://maven.apache.org/guides/mini/guide-mirror-settings.html

  • 相关阅读:
    3. 文件存储格式
    2. Reduce 输出压缩
    Nginx+Tomcat搭建集群环境
    redis缓存失效及解决方案
    几种开源NOSQL数据库
    使用Maven开发用户模块的CRUD(增删改查)
    Spring Boot 面试题整理
    oracle 11g&12c(pdb&cdb)系统巡检
    Redhat 6.8部署oracle12.2.0.1.0
    sqlserver创建程序集
  • 原文地址:https://www.cnblogs.com/larryzeal/p/6178872.html
Copyright © 2011-2022 走看看