Публикация Java приложения в личный Nexus

Backend Java Developer
Backend Java Developer

Oбновлена 2021-06-07: Указал не тот плагин для добавления исходников в nexus. Исправил

Nexus это хранилище артефактов. Артефакт это ваше приложение, например jar-ник. Чаще всего в Nexus сохраняют библиотеки, чтобы другие разработчики могли их подключить в виде зависимости к своему приложению.

Самым большим и открытым Nexus является Maven Central. Он публичный, то есть любой может взять оттуда зависимость. Но что если вам не нужна публичность. Например, мы хотим сделать библиотеку, которой будут пользоваться только наши коллеги с работы, или ваши только вы и ваша команда. Тогда вам нужен Sonatype Nexus.

Nexus Sonatype позволит вам создать свой приватный, ну либо публичный Nexus с авторизацией. Также его можно использовать, как прокси перед Maven Central.

Я не буду рассказывать, как установить свой Nexus. Я расскажу, что добавить в ваше приложение, чтобы деплоить в Nexus.

Скорее всего у вас есть логин и пароль аккаунта в 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 install
Вы можете настроить автоматическую сборку и доставку в Nexus с помощью Gitlab CI, подробнее об этом я писал в статье: Настройка Gitlab CI/CD для Java приложения.

Комментарии