Nexus это хранилище артефактов. Артефакт это ваше приложение, например jar-ник. Чаще всего в Nexus сохраняют библиотеки, чтобы другие разработчики могли их подключить в виде зависимости к своему приложению.
Самым большим и открытым Nexus является Maven Central. Он публичный, то есть любой может взять оттуда зависимость. Но что если вам не нужна публичность. Например, мы хотим сделать библиотеку, которой будут пользоваться только наши коллеги с работы, или ваши только вы и ваша команда. Тогда вам нужен Sonatype Nexus.
Nexus Sonatype позволит вам создать свой приватный, ну либо публичный Nexus с авторизацией. Также его можно использовать, как прокси перед Maven Central.
Я не буду рассказывать, как установить свой Nexus. Я расскажу, что добавить в ваше приложение, чтобы деплоить в Nexus.
Настраиваем settings.xml
Скорее всего у вас есть логин и пароль аккаунта в Nexus. Эти данные нужно указать в файле .m2/settings.xml
. Если этого файла нет в папке .m2
создайте его.
<settings>
<servers>
<server>
<id>nexus-server</id>
<username>nexus-login</username>
<password>nexus-password</password>
</server>
</servers>
</settings>
Настраиваем приложение
Теперь переходим к pom.xml
приложения.
В секцию properties
добавляем версии плагинов и URL нексуса.
<properties>
...
<nexus.url>http://ip_you_nexus:nexus_port</nexus.url>
<plugin.maven.deploy.version>2.8.2</plugin.maven.deploy.version>
<plugin.nexus.stading.maven.version>1.6.8</plugin.nexus.stading.maven.version>
...
</properties>
Добавляем в pom.xml
url на репозитории в нексусе: снепшотный и релизный.
<distributionManagement>
<repository>
<id>nexus-server</id>
<url>${nexus.url}/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-server</id>
<url>${nexus.url}/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
Обратите внимание на строки 3 и 7, id репозиториев должен совпадать с id в секции server файла .m2/settings.xml
.
Мы заменим maven-deploy-plugin
на nexus-staging-maven-plugin
. После этого мы сможем деплоить в наш нексус командой mvn deploy
.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${plugin.maven.deploy.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${plugin.nexus.stading.maven.version}</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>maven-snapshots</serverId>
<nexusUrl>${nexus.url}/nexus/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
</plugins>
</build>
Если вам нужно также сохранять исходники и JavaDoc, то добавьте эти плагины:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Вот и все, теперь вы можете задеплоить артефакт в нексус обычной Maven командой:
mvn clean deploy
Вы можете настроить автоматическую сборку и доставку в Nexus с помощью Gitlab CI, подробнее об этом я писал в статье: Настройка Gitlab CI/CD для Java приложения 👇