Репозиторий Maven
В терминологии Maven репозиторий — это место.
Репозиторий Maven содержит сторонние библиотеки, от которых зависит проект; место, где хранятся эти библиотеки, называется репозиторием.
В Maven любую зависимость, плагин или результат сборки проекта можно назвать артефактом.
Репозитории Maven помогают нам управлять артефактами (в основном JAR-файлами); это место, где хранятся все JAR-файлы (WAR, ZIP, POM и т. д.).
Типы репозиториев Maven:
| Тип репозитория | Место хранения | Назначение | Приоритет доступа |
|---|---|---|---|
| Локальный репозиторий | В домашнем каталоге пользователя.m2/repository | Кэшируют зависимости, загруженные из удалённых репозиториев | 1 |
| Удалённый репозиторий | Сетевой сервер | Обеспечивают централизованное хранение зависимостей и плагинов | 2 |
| - Центральный репозиторий | repo.maven.apache.org | Репозиторий по умолчанию, поддерживаемый командой Maven | 2.1 |
| - Репозиторий приватного сервера | Настраивается внутри компании (например, Nexus) | Размещайте приватные зависимости и ускоряйте сборки | 2.2 |
| - Другие публичные репозитории | Например, Aliyun, JCenter и т. д. | Зеркалируйте или дополняйте Central Repository | 2.3 |
Локальный репозиторий
Локальный репозиторий Maven не создаётся после установки Maven; он создаётся при выполнении первой команды Maven.
При запуске Maven все необходимые Maven артефакты извлекаются непосредственно из локального репозитория. Если в локальном репозитории их нет, он сначала попытается скачать артефакты из удалённого репозитория в локальный репозиторий, а затем использовать артефакты из локального репозитория.
По умолчанию, как в Linux, так и в Windows, у каждого пользователя есть каталог репозитория с именем .m2/repository/ в его домашнем каталоге.
Windows:
C:\Users\<用户名>\.m2\repositoryLinux/macOS:
~/.m2/repository
Локальный репозиторий Maven по умолчанию создаётся в %USER_HOME%. Чтобы изменить местоположение по умолчанию, задайте другой путь в файле settings.xml, расположенном в каталоге %M2_HOME%\conf.
Когда вы запускаете команду 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), из удалённого репозитория.
Пример
<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:
Пример
<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:
Если вы хотите использовать другие прокси-репозитории, вы можете<repositories></repositories>добавить соответствующие URL-адреса репозиториев в узел <repositories>. В качестве примера возьмём прокси-репозиторий Spring:
В вашем файле pom.xml,<denpendencies></denpendencies>добавьте информацию о зависимости, которую вы хотите подключить, в узел <dependencies>:
Выполните команду fetch:
mvn install
Руководство по настройке Gradle
Добавьте следующий код в файл build.gradle:
Если вы хотите использовать другие прокси-репозитории, рассмотрим репозиторий Spring в качестве примера, код выглядит следующим образом:
Добавьте информацию о файле, на который вы хотите ссылаться:
Выполните следующую команду для установки зависимостей:
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>
Другие расширения