maven repository setting.xml mirrorof

Osc*_*car 8 config repository maven

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
    <mirror>
        <id>nexus-osc</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus osc</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>
    <mirror>
        <id>nexus-osc-thirdparty</id>
        <mirrorOf>thirdparty</mirrorOf>
        <name>Nexus osc thirdparty</name>
        <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
    </mirror>
    <mirror>
        <id>maven2</id>
        <mirrorOf>maven2</mirrorOf>
        <name>maven2</name>
        <url>http://repo1.maven.org/maven2/</url>
    </mirror>
</mirrors>
Run Code Online (Sandbox Code Playgroud)

什么是正确的使用mirrorOf?Maven的将首先尝试从得到罐子id=nexus-osc,然后nexus-osc-thirdpartymaven2?我已经检查了maven镜子设置指南,但我仍然无法理解.

Tun*_*aki 8

引用有关镜像Maven文档:

要配置给定存储库的镜像,请在设置文件(${user.home}/.m2/settings.xml)中提供它,为新存储库提供其自己的id和url,并指定mirrorOf设置,即使用镜像的存储库的ID.

这意味着mirrorOf指向现有存储库声明并将Maven配置为在尝试连接指定存储库时使用该镜像.


我们来举个例子吧.您有一个项目,在项目中定义了以下存储库:

<project>
  ...
  <repositories>
    <repository>
      <id>my-internal-site</id>
      <url>http://myserver/repo</url>
    </repository>
  </repositories>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

在您的设置中使用以下声明:

<settings>
  ...
  <mirrors>
    <mirror>
      <id>UK</id>
      <name>UK Central</name>
      <url>http://uk.maven.org/maven2</url>
      <mirrorOf>my-internal-site</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>
Run Code Online (Sandbox Code Playgroud)

这意味着每当Maven尝试从my-internal-site存储库下载库时,它实际上不会使用http://myserver/repo,而是使用镜像声明并从中下载库http://uk.maven.org/maven2.

没有定义任何订单.它只是声明Maven需要下载工件来代替镜像存储库.


指定<mirrorOf>central</mirrorOf>告诉Maven您正在镜像Maven Central存储库,这是Maven从中下载工件的默认位置.


因此,当您拥有一个中央内部存储库并且每个Maven请求都通过该存储库管理器时,通常在企业上下文中使用镜像.