Репозиторий Maven

В терминологии Maven репозиторий — это место.

Репозиторий Maven содержит сторонние библиотеки, от которых зависит проект; место, где хранятся эти библиотеки, называется репозиторием.

В Maven любую зависимость, плагин или результат сборки проекта можно назвать артефактом.

Репозитории Maven помогают нам управлять артефактами (в основном JAR-файлами); это место, где хранятся все JAR-файлы (WAR, ZIP, POM и т. д.).

Типы репозиториев Maven:

Тип репозиторияМесто храненияНазначениеПриоритет доступа
Локальный репозиторийВ домашнем каталоге пользователя.m2/repositoryКэшируют зависимости, загруженные из удалённых репозиториев1
Удалённый репозиторийСетевой серверОбеспечивают централизованное хранение зависимостей и плагинов2
- Центральный репозиторийrepo.maven.apache.orgРепозиторий по умолчанию, поддерживаемый командой Maven2.1
- Репозиторий приватного сервераНастраивается внутри компании (например, Nexus)Размещайте приватные зависимости и ускоряйте сборки2.2
- Другие публичные репозиторииНапример, Aliyun, JCenter и т. д.Зеркалируйте или дополняйте Central Repository2.3

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

Локальный репозиторий Maven не создаётся после установки Maven; он создаётся при выполнении первой команды Maven.

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

По умолчанию, как в Linux, так и в Windows, у каждого пользователя есть каталог репозитория с именем .m2/repository/ в его домашнем каталоге.

  • Windows: C:\Users\<用户名>\.m2\repository

  • Linux/macOS: ~/.m2/repository

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

<settings> <localRepository>C:/MyLocalRepository</localRepository> </settings>

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

Очистка локального репозитория:

mvn dependency:purge-local-repository
# 或手动删除~/.m2/repository目录

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

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

Центральный репозиторий содержит самые популярные open-source Java-артефакты, а также исходный код, информацию об авторах, информацию SCM, сведения о лицензиях и т. д. Обычно здесь можно скачать артефакты, от которых зависят простые Java-проекты.

Ключевые понятия Центрального репозитория:

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

Адрес Центрального репозитория по умолчанию (явная настройка не требуется):https://repo.maven.apache.org/maven2/


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

Настройка пользовательского репозитория

Если Maven не может найти файлы зависимостей в Центральном репозитории, он останавливает процесс сборки и выводит сообщение об ошибке в консоль. Чтобы избежать этого, Maven предоставляет концепцию удалённых репозиториев — пользовательских репозиториев, определяемых разработчиками и содержащих необходимые библиотеки кода или JAR-файлы, используемые в других проектах.

Например, при использовании следующего pom.xml Maven загрузит файлы зависимостей, объявленные в pom.xml (которые отсутствуют в Central Repository), из удалённого репозитория.

Пример

<repositories>
    <repository>
        <id>aliyun</id>
        <name>Aliyun Maven</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled> <!-- Отключить версии SNAPSHOT -->
        </snapshots>
    </repository>
</repositories>

Зеркальный репозиторий (рекомендуется)

Настройка в settings.xml:

Пример

<mirrors>
    <mirror>
        <id>aliyun</id>
        <name>Зеркало Aliyun</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>central</mirrorOf> <!-- Переопределить центральный репозиторий -->
    </mirror>
</mirrors>

Репозиторий Maven Aliyun

Стандартный репозиторий Maven находится за рубежом, поэтому в Китае его использование неизбежно медленное. Мы можем переключиться на репозиторий Aliyun.

Измените файл settings.xml в папке conf в корневом каталоге Maven и добавьте следующее содержимое в узел mirrors:

<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>Публичный репозиторий Aliyun</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>

Если вы хотите использовать другие прокси-репозитории, вы можете<repositories></repositories>добавить соответствующие URL-адреса репозиториев в узел <repositories>. В качестве примера возьмём прокси-репозиторий Spring:

<repository> <id>spring</id> <url>https://maven.aliyun.com/repository/spring</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository>

В вашем файле pom.xml,<denpendencies></denpendencies>добавьте информацию о зависимости, которую вы хотите подключить, в узел <dependencies>:

<dependency> <groupId>[GROUP_ID]</groupId> <artifactId>[ARTIFACT_ID]</artifactId> <version>[VERSION]</version> </dependency>

Выполните команду fetch:

mvn install

Руководство по настройке Gradle

Добавьте следующий код в файл build.gradle:

allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/public/' } mavenLocal() mavenCentral() } }

Если вы хотите использовать другие прокси-репозитории, рассмотрим репозиторий Spring в качестве примера, код выглядит следующим образом:

allProjects { repositories { maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/spring/' } mavenLocal() mavenCentral() } }

Добавьте информацию о файле, на который вы хотите ссылаться:

dependencies { compile '[GROUP_ID]:[ARTIFACT_ID]:[VERSION]' }

Выполните следующую команду для установки зависимостей:

gradle dependencies 
или  
./gradlew dependencies 

Репозиторий приватного сервера

Типы репозиториев:

Тип репозиторияНазначение
hostedХранить приватные артефакты
proxyПрокси для удалённых репозиториев
groupАгрегирование нескольких репозиториев

Публикация на приватный сервер

Настройка в pom.xml:

<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <url>http://your-nexus/repository/maven-releases</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <url>http://your-nexus/repository/maven-snapshots</url>
    </snapshotRepository>
</distributionManagement>

Настройка аутентификации в settings.xml:

<servers>
    <server>
        <id>nexus-releases</id>
        <username>deploy-user</username>
        <password>deploy-pwd</password>
    </server>
</servers>

Команда публикации:

mvn deploy

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

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

  • Шаг 1- Поиск в локальном репозитории. Если он не найден, перейдите к шагу 2; если найден, переходите к другим операциям.
  • Шаг 2- Поиск в Центральном репозитории. Если он не найден и настроены один или несколько удалённых репозиториев, перейдите к шагу 4; если найден, загрузите его в локальный репозиторий для дальнейшего использования.
  • Шаг 3- Если удалённые репозитории не настроены, Maven просто остановит обработку и выдаст ошибку (не удаётся найти файлы зависимостей).
  • Шаг 4- Поиск файлов зависимостей в одном или нескольких удалённых репозиториях. Если они найдены, загрузите их в локальный репозиторий для дальнейшего использования; в противном случае Maven остановит обработку и выдаст ошибку (не удаётся найти файлы зависимостей).

Основные команды

КомандаНазначение
mvn dependency:resolveРазрешить зависимости
mvn dependency:treeПросмотреть дерево зависимостей
mvn dependency:purge-local-repositoryОчистить локальный репозиторий
mvn deployОпубликовать в удалённый репозиторий

Распространённые проблемы и решения

1. Симптом: ошибка загрузки зависимостей:Не удалось передать артефакт...

Решение:
  • Проверьте сетевое подключение
  • Проверьте правильность URL репозитория
  • Временно отключите брандмауэр для проверки

2. Симптом: ошибка аутентификации:401 Unauthorized

Решение:

  • Проверьте конфигурацию <server> в settings.xml
  • Убедитесь, что у имени пользователя/пароля есть права доступа к репозиторию

3. Конфликты зависимостей

Устранение неполадок:

mvn dependency:tree -Dverbose

Решение: унифицируйте версию в <dependencyManagement>

Другие расширения