Какие репозитории (базы) вы знаете в Maven?

«Какие репозитории (базы) вы знаете в Maven?» — вопрос из категории Системы сборки, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Локальный репозиторий (Local Repository):

    • Расположен в папке ~/.m2/repository на машине разработчика или агента CI/CD.
    • Кэширует все загруженные из удалённых источников зависимости. При сборке Maven сначала ищет артефакты здесь.
  2. Центральный репозиторий Maven (Maven Central):

    • Основной публичный репозиторий по умолчанию (https://repo.maven.apache.org/maven2/).
    • Отсюда загружаются большинство open-source библиотек (JUnit, Selenium, Log4j и т.д.).
  3. Удалённые репозитории (Remote Repositories):

    • Могут быть публичными (как Central) или приватными корпоративными.
    • Указываются в pom.xml проекта или глобальном settings.xml. Например, для использования репозитория JCenter раньше добавляли:
      <repositories>
      <repository>
          <id>jcenter</id>
          <url>https://jcenter.bintray.com</url>
      </repository>
      </repositories>
  4. Корпоративный репозиторий-менеджер (Corporate Repository Manager):

    • Ключевой инструмент в enterprise-среде. Чаще всего это Nexus или JFrog Artifactory.
    • Выступает как прокси-кэш для Maven Central и других публичных репозиториев, ускоряя сборки.
    • Служит источником истины для внутренних артефактов компании (например, общих библиотек или релизных версий сервисов).
    • Позволяет разделять Snapshot- и Release-репозитории. SNAPSHOT-версии (нестабильные, для разработки) обычно задеплоятся в отдельный репозиторий с политикой частого обновления, а релизные версии — в стабильный, неизменяемый репозиторий.

Понимание этой структуры критично для настройки стабильного и быстрого процесса CI/CD, а также для управления зависимостями в большом проекте.