Что такое Mirror в файле настроек Maven.xml?

Исправьте меня, если я ошибаюсь, но зеркало используется для перенаправления всего трафика на определенный URL-адрес репозитория и блокировки всего остального (включая центральное репо Maven).

Теперь, если у меня есть зеркало на http://a.com:8081 и репозиторий на http://b.com:8081. Будет ли использоваться второй URL? Я предполагаю, что ответ № Нет. У вас есть несколько зеркал?

Ответы

Ответ 1

Поправьте меня, если я ошибаюсь, но зеркало используется для перенаправления всего трафика на определенный URL-адрес хранилища и блокирования всего остального (включая центральное хранилище Maven).

Это не совсем правильно. Maven загружает артефакты путем поиска в определенных хранилищах. Эти репозитории определены в POM проекта или в настройках Maven. Но, как указано в документации к зеркалу:

Однако вы можете захотеть использовать альтернативное зеркало для определенного репозитория без изменения файлов проекта.

Давайте возьмем пример из документации и прокомментируем его:

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

Это определяет одно зеркало, которое будет использоваться, когда Maven захочет получить зависимость из центрального репозитория Maven. Допустим, у вас есть 2 текущих репозитория, а именно Maven Central и пользовательский репозиторий A. Что происходит следующим образом:

  1. Вы объявляете зависимость от артефакта;
  2. Maven будет искать эту зависимость в ваших определенных репозиториях, поэтому он будет искать ее в репозитории A и Maven Central;
  3. Допустим, он начинается с A: он попадет на URL, определенный для этого репозитория, как и следовало ожидать. Тогда позвольте сказать, что это не было найдено там;
  4. Затем он заглянет внутрь Maven Central. Однако Maven заметит, что для этого хранилища было настроено зеркало. Это не ударит Maven Central в repo1.maven.org. Вместо этого он uk.maven.org его из uk.maven.org, который является URL-адресом, определенным в элементе конфигурации зеркала.

Как показывает этот пример, зеркало применяется только к определенным репозиториям, которые определены с помощью элемента конфигурации <mirrorOf>. В предыдущем случае у нас было <mirrorOf>central</mirrorOf> что означает "Mirror Maven Central". Этот элемент может иметь различные значения, и в документации приведены примеры:

Примеры:

  • *= все
  • external:*= все не на локальном хосте и не на основе файлов.
  • repo,repo1= репо или репо1
  • *,!repo1= все, кроме repo1:

А что если у меня есть зеркало для http://a.com:8081 и хранилище для http://b.com:8081. Будет ли второй URL когда-нибудь привыкнуть? Я предполагаю, что ответ №

Вышесказанное показывает, что ответ не строго нет. Зеркало на http://a.com:8081 будет использовано, когда Maven попытается извлечь зависимость из одного из зеркалируемых репозиториев. Если он действительно отражает хранилище на http://b.com:8081 то запросы на http://b.com:8081 не будут http://b.com:8081 (они будут перенаправлены на http://a.com:8081); но если этого не произойдет, Maven продолжит получать зависимости от http://b.com:8081 как обычно.


Можете ли вы иметь несколько зеркал?

Да, ты можешь.