Какие репозитории есть у maven
Перейти к содержимому

Какие репозитории есть у maven

  • автор:

Где находится локальный репозиторий Maven?

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

Также имейте в виду, что помимо локального репозитория этого типа, Maven поддерживает три типа репозиториев:

  • Local — расположение папки на локальном компьютере Dev.
  • Central — репозиторий, предоставленный сообществом Maven.
  • Удаленный — пользовательский репозиторий, принадлежащий организации

Давайте теперь сосредоточимся на локальном репозитории.

2. Локальный репозиторий

Локальный репозиторий Maven — это каталог на локальном компьютере, где хранятся все артефакты проекта.

Когда сборка Maven выполняется, Maven автоматически загружает все jar-файлы зависимостей в локальный репозиторий.

Обычно этот каталог называется .m2 .

Вот где находится локальный репозиторий по умолчанию в зависимости от ОС:

 Windows: C:\Users\User_Name>\.m2 

Руководство по Maven. Репозитории.

При работе с Maven под репозиторием мы понимаем директорию, где хранятся все JAR, библиотеки, плагины и любые артефакты, которыми Maven может воспользоваться.

Существует три типа репозиториев Maven:

Локальные репозитории

Локальный репозиторий – это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven.

Локальный репозиторий Maven хранит все зависимости проекта (библиотеки, плагины и т.д.). Когда мы выполняем сборку проекта с помощью Maven, то все зависимости (их JAR-файлы) автоматически загружаются в локальный репозиторий. Это помогает нам избежать использование ссылок на удалённый репозиторий при каждой сборке проекта.

По умолчанию, локальный репозиторий создаётся Maven в директории %USER_HOME%. Для того, чтобы изменить директорию нам необходимо указать её в файле settings.xml, который находится в папке %M2_HOME%\conf.

  xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> /home/Documents/MyLocalRepository  

Когда мы выполним команду run Maven, то все зависимости будут автоматически загружены в локальный репозиторий.

Центральный репозиторий

Центральный репозиторий Maven – это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек.

Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории по этому адресу: http://repo1.maven.org/maven2/.

Удалённый репозиторий

Иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке.

Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости.

Для того, чтобы настроить удалённый репозиторий, необходимо внести следующие изменения в файл pom.xml.

  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0  com.companyname.projectgroup  Tutorials  1.0   net.proselyte.private-lib  private-lib  1.0.0      proselyte.lib1  http://download.proselyte.net/maven2/lib1   proselyte.lib2  http://download.proselyte.net/maven2/lib2     

Порядок поиска зависимостей Maven

Когда мы выполняем сборку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:

  1. Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2.
  2. Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4.
  3. Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке.
  4. Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет – выводится сообщение об ошибке.

Maven, где мои артефакты? Еще одна статья про управление зависимостями

Легко жить с maven, когда есть доступ к центральному репозиторию, или у компании есть один корпоративный репозиторий. Все меняется, если работаешь в закрытом контуре, а количество репозиториев ближе к сотне. Под катом история о том, где искать потерявшийся артефакт и как для этого приготовить maven.

Что будет?

В статье будут примеры настройки settings, pom, описание поиска в репозиториях. Не будет настройки nexus\artifactory, проблем связанных с ними.

Начнем с простого

Добавим зависимость на spring в своем pom.

 org.springframework spring-webmvc 5.0.0.RELEASE  

pom.xml

 4.0.0 test dependency-testing 1.0.0 Dependency test  org.springframework spring-webmvc 5.0.0.RELEASE    

Предположим, что мы только установили maven и не меняли никаких настроек. После инициализации поиска зависимостей через сборку maven, или через ide, maven сначала проверит наличие артефакта в локальном репозитории в директории $/.m2/repository/ .

Если в локальном репозитории артефакта нет, то запрос пойдет в репозиторий central.

Мы не указывали этот репозиторий, но он всегда добавляется мавеном при сборке.

settings.xml

      nexus-corp nexus-corp-repo http://nexus.mycompany.com:8081/nexus/central/   nexus   nexus  

Зачем мне settings.xml?

В нем можно настроить репозитории, зеркала, прокси, переменные среды и т.д. Прописать один раз и использовать во всех проектах (в идеальном мире)
Подробнее про settings.xml

С такой конфигурацией порядок поиска будет аналогичен варианту с конфигурацией по умолчанию, но появится дополнительный шаг. Перед тем как пойти в central, мавен попытается скачать артефакт из репозитория nexus-corp.

Зеркало

Добавим зеркало для репозитория nexus-corp.

 nexus-corp-mirror nexus-corp-mirror http://nexus.mirror.mycompany.com:8081/nexus/central/ nexus-corp 

Когда нужно зеркало?

  • недоступен внешний репозиторий
  • для экономии внешнего трафика
  • чтобы переопределить репозиторий из settings\pom

Когда maven дойдет до шага поиска в репозитории nexus-corp, то вместо него попытается найти артефакт в репозитории nexus-corp-mirror.

При этом если он не найдет его в nexus-corp-mirror, то запроса в nexus-corp не будет.

А если добавить зеркало с wildcard, то все запросы будут направлены на него, если не указаны другие зеркала.

 all nexus-corp-mirror http://nexus.mirror.mycompany.com:8081/nexus/central/ * 
Порядок поиска

В общем случае схема поиска будет такой:

1. Поиск в локальном репо
2. Поиск в репозиториях в порядке объявления с учетом приоритета (либо в их зеркалах)

В конце добавляется central. Он всегда последний, если не был перезаписан.

Merge конфигураций

Перед выполнением сборки maven «склеивает» конфиги:

  • глобальный — $/conf/settings.xml
  • пользовательский — $/.m2/settings.xml
  • проектный — pom.xml

The former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.

По факту, если при склеивании не возникло конфликтов, то приоритет репозиториев следующий, в порядке уменьшения:

  • глобальный
  • пользовательский
  • pom.xml
  • repo-global-setting1
  • repo-user-setting1
  • repo-user-setting2
  • repo-pom1
  • central

global-settings.xml

      repo-global-setting1 http://nexus.mycompany.com:8081/nexus/repo-global-setting1-url/   g-nexus   g-nexus   

user-settings.xml

      repo-user-setting1 http://nexus.mycompany.com:8081/nexus/repo-user-setting1-url/  repo-user-setting2 http://nexus.mycompany.com:8081/nexus/repo-user-setting2-url/   nexus   nexus   

pom.xml

 4.0.0 test dependency-testing 1.0.0 Dependency test  repo-pom1 http://nexus.mycompany.com:8081/nexus/repo-pom1-url/    org.slf4j slf4j-api 1.7.25    

С разрешением конфликтов появилось еще большее непонимание. Если объявить репозиторий с одним id в разных профилях, то приоритет имеет глобальный конфиг, но если объявить профили с одинаковым id, то приоритет имеет пользовательский. Дальше экспериментировать уже не стал.

Поиск пропавших

Так что делать с ошибкой Could not resolve dependencies for project myproject:jar:1.0.0: Failed to collect dependencies at com.someproject:artifact-name:jar:1.0.0 ?

1. Проверить правильность имени и версии артефакта.
2. Посмотреть какие репозитории\зеркала указаны в ваших settings\pom.
3. Проверить наличие артефакта в этих репозиторииях

Обычно проблема решается на втором шаге, но кроме этих пунктов встречаются проблемы из-за прокси, также бывает, что скаченный jar поврежден(хотя сам я сталкивался с таким всего один раз).

Для snapshot версий полезна команда -U — принудительное обновление snapshot зависимостей. По умолчанию maven обновляет их только после истечения таймаута раз в день(параметр updatePolicy)

Maven – хранилища

В терминологии Maven репозиторий – это каталог, в котором хранятся все файлы проекта, библиотеки, плагины или любые другие специфичные для проекта артефакты, которые Maven может легко использовать.

Репозиторий Maven бывает трех типов. Следующая иллюстрация даст представление об этих трех типах.

  • местный
  • центральный
  • дистанционный пульт

Структура хранилища

Локальный репозиторий

Локальный репозиторий Maven – это папка на вашем компьютере. Он создается при первом запуске любой команды maven.

Локальный репозиторий Maven хранит все зависимости вашего проекта (библиотеки JAR, плагины JAR и т. Д.). Когда вы запускаете сборку Maven, Maven автоматически загружает все jar-файлы зависимостей в локальный репозиторий. Это помогает избежать ссылок на зависимости, хранящиеся на удаленном компьютере, каждый раз, когда создается проект.

Локальный репозиторий Maven по умолчанию создается Maven в каталоге% USER_HOME%. Чтобы переопределить расположение по умолчанию, укажите другой путь в файле Maven settings.xml, доступном в каталоге% M2_HOME% \ conf.

 xmlns = "http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> C:/MyLocalRepository  

Когда вы запускаете команду Maven, Maven загружает зависимости в ваш пользовательский путь.

Центральный репозиторий

Центральный репозиторий Maven – это репозиторий, предоставленный сообществом Maven. Содержит большое количество часто используемых библиотек.

Когда Maven не находит никакой зависимости в локальном хранилище, он начинает поиск в центральном хранилище, используя следующий URL – https://repo1.maven.org/maven2/

Основные понятия центрального хранилища следующие:

  • Этот репозиторий управляется сообществом Maven.
  • Не требуется быть настроенным.
  • Требуется доступ в Интернет для поиска.

Для просмотра содержимого центрального хранилища maven сообщество maven предоставило URL-адрес – https://search.maven.org/#browse . Используя эту библиотеку, разработчик может искать все доступные библиотеки в центральном хранилище.

Удаленный репозиторий

Иногда Maven также не находит упомянутой зависимости в центральном хранилище. Затем он останавливает процесс сборки и выводит сообщение об ошибке на консоль. Чтобы предотвратить такую ​​ситуацию, Maven предлагает концепцию удаленного репозитория , который является собственным настраиваемым репозиторием разработчика, содержащим необходимые библиотеки или другие файлы проекта.

Например, используя нижеупомянутый POM.xml, Maven будет загружать зависимости (недоступные в центральном репозитории) из удаленных репозиториев, упомянутых в том же pom.xml.

 4.0.0 com.companyname.projectgroup project 1.0  com.companyname.common-lib common-lib 1.0.0    companyname.lib1 http://download.companyname.org/maven2/lib1  companyname.lib2 http://download.companyname.org/maven2/lib2    

Последовательность поиска зависимостей Maven

Когда мы выполняем команды сборки Maven, Maven начинает поиск библиотек зависимостей в следующей последовательности:

Шаг 1 – Поиск зависимости в локальном репозитории, если не найден, перейти к шагу 2, иначе выполнить дальнейшую обработку.

Шаг 2 – Поиск зависимости в центральном репозитории, если не найдено и упоминается / упоминается удаленный репозиторий / репозитории, затем перейдите к шагу 4. В противном случае он загружается в локальный репозиторий для дальнейшего использования.

Шаг 3 – Если удаленный репозиторий не был упомянут, Maven просто останавливает обработку и выдает ошибку (Невозможно найти зависимость).

Шаг 4 – Поиск зависимости в удаленном репозитории или репозиториях, если он найден, он загружается в локальный репозиторий для дальнейшего использования. В противном случае Maven останавливает обработку и выдает ошибку (Невозможно найти зависимость).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *