什么是Maven settings.xml文件中的Mirror?

时间:2016-04-21 01:16:09

标签: maven

如果我错了,请纠正我,但镜像用于将所有流量重定向到特定的存储库URL并阻止其他所有内容(包括Maven中央存储库)。

现在如果我有world的镜像和 top -> next = world; world = top; 的存储库怎么办?第二个URL会被使用吗?我假设答案是否定的。你能有多个镜子吗?

1 个答案:

答案 0 :(得分:19)

  

如果我错了,请纠正我,但镜像用于将所有流量重定向到特定的存储库URL并阻止其他所有内容(包括Maven中央存储库)。

这不完全正确。 Maven通过在定义的repositories内搜索工件来下载工件。这些存储库在项目的POM或Maven设置中定义。但是,正如Mirror documentation

中所述
  

但是,您可能希望在不更改项目文件的情况下为特定存储库使用替代镜像。

让我们从文档中做出示例并对其进行评论:

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

这定义了一个镜像,当Maven想要从Maven Central获取依赖关系时将使用该镜像。让我们假设您有2个当前存储库,即Maven Central和自定义存储库A.以下是:

  1. 您声明对工件的依赖;
  2. Maven将在您定义的存储库中查找该依赖项,因此它将在存储库A和Maven Central中查找它;
  3. 让我们说它以A开头:它会点击为该存储库定义的URL,就像您期望的那样。然后,让我们说它在那里找不到;
  4. 然后它会看到Maven Central。但是,Maven会注意到为该存储库配置了镜像。它不会在repo1.maven.org命中Maven Central。相反,它将从uk.maven.org获取它,这是镜像配置元素中定义的URL。
  5. 如此示例所示,镜像仅适用于使用<mirrorOf>配置元素定义的某些存储库。在前一种情况下,我们有<mirrorOf>central</mirrorOf>,这意味着&#34; Mirror Maven Central&#34;。此元素can have various values和文档gives examples

      

    示例:

         
        
    • * =一切
    •   
    • external:* =所有内容都不在本地主机上,而不是基于文件。
    •   
    • repo,repo1 = repo或repo1
    •   
    • *,!repo1 =除repo1以外的所有内容:
    •   
      

    现在如果我有http://a.com:8081的镜像和http://b.com:8081的存储库怎么办?第二个URL会被使用吗?我认为答案是否定的。

    以上显示答案并非严格禁止。当Maven尝试从其镜像的其中一个存储库获取依赖项时,将使用http://a.com:8081的镜像。如果它确实将存储库镜像到http://b.com:8081,那么将不会向http://b.com:8081发出任何请求(它们将被重定向到http://a.com:8081);但是如果它没有,Maven将继续像往常一样从http://b.com:8081获取依赖关系。

      

    你有多个镜子吗?

    是的,你可以。