Какие уровни репозиториев бывают в Maven?
Что проверяют
Понимаете ли вы, откуда Maven берёт зависимости вашего проекта автотестов и что делать, когда сборка не может их скачать. Для QA это практичный вопрос: общая библиотека тестов, корпоративный Nexus, падение сборки в CI. Следом часто спрашивают, где настраивается зеркало и чем mvn install отличается от mvn deploy.
Как отвечать
Уровней три, и Maven проходит их по порядку:
- локальный: папка
~/.m2/repositoryна вашей машине или на агенте CI. Maven всегда сначала ищет артефакт здесь. Сюда же попадает всё скачанное и то, что вы собрали командойmvn install; - центральный: Maven Central, публичный репозиторий, прописанный в Super POM по умолчанию. Оттуда приходят JUnit, TestNG, Selenium, RestAssured, Allure и почти всё остальное;
- удалённые: любые другие репозитории, объявленные в
<repositories>вpom.xmlили в профилеsettings.xml. Плагины ищутся отдельно, в<pluginRepositories>.
В компаниях обычно стоит менеджер репозиториев, Nexus или Artifactory. Он проксирует Maven Central, хранит внутренние артефакты и прописывается в settings.xml как зеркало через <mirror> с <mirrorOf>*</mirrorOf>. Логины к нему лежат там же, в <servers>. Своя библиотека публикуется командой mvn deploy в репозиторий из <distributionManagement>.
Полезные детали: снапшоты по умолчанию проверяются на обновление раз в сутки, флаг -U заставляет перекачать их сразу, -o включает офлайн-режим. Начиная с Maven 3.8.1 репозитории по HTTP без TLS заблокированы по умолчанию.
Если вы работали только с Gradle или с готовым проектом, скажите об этом и объясните, как бы разбирались: mvn dependency:tree, подробный лог с -X, проверка settings.xml.
Где спотыкаются
Думают, что Maven каждый раз качает зависимости из интернета. На деле всё уже скачанное берётся из локального репозитория.
Лечат ошибку «артефакт не найден» удалением всего ~/.m2, хотя часто хватает -U или удаления папки одного артефакта, где закеширована неудачная попытка скачивания.
Кладут пароли от Nexus прямо в pom.xml и коммитят в общий репозиторий. Учётные данные должны жить в settings.xml на машине или в секретах CI.