Использование зеркал для репозиториев
В репозиториях вы указываете, из каких мест вы хотите загружать определенные артефакты, такие как зависимости и maven-плагины. Репозитории могут быть объявлены внутри проекта, а это означает, что если у вас есть собственные настраиваемые репозитории, те, кто делится вашим проектом, легко получают нужные настройки прямо из коробки. Однако вы можете захотеть использовать альтернативное зеркало для конкретного репозитория без изменения файлов проекта.
Вот несколько причин использовать зеркало:
- В Интернете есть синхронизированное зеркало, которое географически ближе и быстрее
- Вы хотите заменить конкретный репозиторий своим собственным внутренним репозиторием, над которым у вас есть больший контроль.
- Вы хотите запустить менеджер репозитория, чтобы предоставить локальный кеш для зеркала, и вместо этого вам нужно использовать его URL
Чтобы настроить зеркало данного репозитория, вы указываете его в своем файле настроек (${user.home}/.m2/settings.xml
), давая новому репозиторию его собственный идентификатор и URL-адрес, и указываете параметр mirrorOf
, который является ID репозитория, зеркало которого вы используете. Например, ID основного репозитория Maven Central, включенного по умолчанию, является центральным, поэтому для использования другого зеркального экземпляра вы должны настроить следующее:
<settings>
...
<mirrors>
<mirror>
<id>other-mirror</id>
<name>Other Mirror Repository</name>
<url>https://other-mirror.repo.other-company.com/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
...
</settings>
Обратите внимание, что для данного репозитория может быть не более одного зеркала. Другими словами, вы не можете сопоставить один репозиторий с группой зеркал, которые все определяют одно и то же значение <mirrorOf>
. Maven не будет объединять зеркала, а просто выбирает первое совпадение. Если вы хотите предоставить объединенное представление нескольких репозиториев, используйте вместо этого менеджер репозиториев.
Документацию по дескриптору настроек можно найти на веб-сайте модели локальных настроек Maven.
Примечание. Официальный репозиторий Maven находится по адресу https://repo.maven.apache.org/maven2, размещенный компанией Sonatype и распространяется по всему миру через CDN.
Список известных зеркал доступен в метаданных репозитория. Эти зеркала могут иметь разное содержимое, и мы никоим образом их не поддерживаем.
Использование единого репозитория
Вы можете заставить Maven использовать единый репозиторий, если он будет зеркалировать все запросы репозитория. Репозиторий должен содержать все желаемые артефакты или иметь возможность передавать запросы другим репозиториям. Этот параметр наиболее полезен при использовании внутреннего репозитория компании с 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>
Расширенная спецификация зеркала
Одно зеркало может обрабатывать несколько репозиториев при использовании вместе с менеджером репозиториев.
Синтаксис Maven 2.0.9:
*
соответствует всем идентификаторам репо.external:*
соответствует всем репозиториям, кроме репозиториев, использующих localhost или файловые репозитории. Это используется вместе с менеджером репозиториев, когда вы хотите исключить репозитории перенаправления, которые определены для тестирования интеграции.- несколько репозиториев могут быть указаны с использованием запятой в качестве разделителя
- восклицательный знак может использоваться вместе с одним из вышеуказанных подстановочных знаков, чтобы исключить идентификатор репозитория
Будьте осторожны, чтобы не включать лишние пробелы вокруг идентификаторов или подстановочных знаков в списках, разделенных запятыми. Например, зеркало с <mirrorOf>
, установленным в !repo1, *
не будет отражать ничего, а !repo1,*
будет отражать все, кроме repo1
.
Положение подстановочных знаков в списке идентификаторов репозиториев, разделенных запятыми, не имеет значения, поскольку подстановочные знаки откладываются до дальнейшей обработки, а явное включение или исключение останавливает обработку, отменяя любое совпадение с подстановочными знаками.
Когда вы используете расширенный синтаксис и настраиваете несколько зеркал, помните, что порядок их объявления имеет значение. Когда Maven ищет зеркало некоторого репозитория, он сначала проверяет зеркало, <mirrorOf>
которого точно соответствует идентификатору репозитория. Если прямого совпадения не найдено, Maven выбирает первое зеркальное объявление, которое соответствует приведенным выше правилам (если есть). Следовательно, вы можете повлиять на порядок соответствия, изменив порядок определений в файле settings.xml
.
Примеры:
*
= всеexternal:*
= все не на локальном хосте и не на файловой основе.repo,repo1
= repo or repo1 *,!repo1 = everything except 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>
Создание собственного зеркала
Размер центрального репозитория неуклонно увеличивается. Чтобы сэкономить полосу пропускания и ваше время, зеркалирование всего центрального репозитория запрещено. (Это приведет к автоматическому бану) Вместо этого мы предлагаем вам настроить диспетчер репозитория в качестве прокси.
Если вы действительно хотите стать официальным зеркалом, свяжитесь с нами в MVNCENTRAL и сообщите свое местоположение, и мы поможем вам настроить.