Как настроить Maven для работы с Nexus?
Настройка Maven для Nexus — это конфигурация двух файлов: settings.xml (учётные данные и зеркала) и pom.xml (адреса для публикации артефактов), обеспечивающая скачивание зависимостей из Nexus и загрузку артефактов в Nexus.
Общая схема
Пример
settings.xml (credentials + mirror) → Maven → Nexus (maven-public)
pom.xml (distributionManagement) → Maven → Nexus (maven-releases / maven-snapshots)
1. Файл settings.xml
Обычно располагается в ~/.m2/settings.xml или предоставляется Jenkins через Config File Provider.
Полный пример settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0
https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- Учетные данные для Nexus -->
<servers>
<server>
<id>nexus-releases</id>
<username>${env.NEXUS_USER}</username>
<password>${env.NEXUS_PASS}</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>${env.NEXUS_USER}</username>
<password>${env.NEXUS_PASS}</password>
</server>
</servers>
<!-- Зеркало: все запросы идут через Nexus -->
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus.company.com/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-public</id>
<url>https://nexus.company.com/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-public</id>
<url>https://nexus.company.com/repository/maven-public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
2. Файл pom.xml — секция distributionManagement
Определяет, куда Maven будет публиковать артефакты при выполнении mvn deploy:
Пример
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Releases</name>
<url>https://nexus.company.com/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshots</name>
<url>https://nexus.company.com/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
Связь между settings.xml и pom.xml
Значения <id> в distributionManagement (pom.xml) должны совпадать с <id> в <servers> (settings.xml) — так Maven понимает, какие учётные данные использовать для конкретного репозитория.
Пример
pom.xml: <id>nexus-releases</id> ←→ settings.xml: <server><id>nexus-releases</id>
Команда для публикации
Пример
mvn deploy -s /path/to/settings.xml
Использование в Jenkins
Пример
stage('Deploy to Nexus') {
steps {
configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
sh 'mvn deploy -DskipTests -s $MAVEN_SETTINGS'
}
}
}
Вывод
Настройка Maven-Nexus сводится к трём вещам: учётные данные в settings.xml, зеркало для скачивания зависимостей и distributionManagement в pom.xml для публикации. Главное — совпадение <id> между файлами.
На собеседовании: могут спросить, где хранить учётные данные для Nexus. Правильный ответ: никогда в pom.xml (он коммитится в Git). Только в
settings.xml, который предоставляется через Jenkins Config File Provider или через переменные окружения.