Maven <mirror> 标签,external:* 参数的含义

Maven <mirror> tag, meaning of external:* parameter

<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:*</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

官方文档,关于<mirrorOf>标签中external:*参数的含义,是这样说的:

matches all repositories except those using localhost or file based repositories. This is used in conjunction with a repository manager when you want to exclude redirecting repositories that are defined for Integration Testing.

在此背景下,我的问题是:

  • What does it mean that a repository uses localhost?

只是在任何存储库声明中使用的 URL 的主机不是 localhost127.0.0.1。例如,一个存储库 URL 被声明为:

<repository>
  <id>my-repo</id>
  <url>http://localhost:8080/repo</url> <!-- or http://127.0.0.1:8080/repo -->
</repository>

它不会被external:*镜像考虑,因为它的主机是localhost。例如,如果您在同一台机器上托管了工件管理器,并且您在本地工作(因此不需要代理),情况可能就是这样。

  • What does it mean that repository is file-based?

存储库 URL 的协议是 file。例如,一个存储库 URL 被声明为:

<repository>
  <id>my-repo</id>
  <url>file:///C:\my-repo</url>
</repository>

将是一个基于文件的存储库。将在文件夹 C:\my-repo 中搜索工件,就像它是一个普通的远程存储库一样。如果您想为测试目的设置远程存储库(即没有工件管理器,仅使用文件夹,可能在另一个驱动器上),这将很有用。这种情况也不需要代理,external:*不考虑

作为参考,external:* 的代码执行 exactly those checks