Опубликуйте снимок в nexus с помощью maven 3.0.5

#maven #maven-3 #nexus

#maven #maven-3 #nexus

Вопрос:

Я не могу выпустить версию моментального снимка артефакта, который я создаю с помощью maven для nexus. Версия моего артефакта 1.0.0-SNAPSHOT.

Я могу выполнить mvn clean install без проблем. Но когда я пытаюсь развернуть с помощью mvn deploy , я получаю следующую ошибку :

 Return code is: 400, ReasonPhrase: Repository version policy: RELEASE does not allow version: 1.0.0-20161019.214318-1. -> [Help 1]
  

Согласно тому, что мне удалось выяснить, maven3 добавляет временную метку вместо суффикса МОМЕНТАЛЬНОГО СНИМКА к артефакту, который я хочу развернуть. <uniqueVersion> Тег maven не поддерживается в maven3. Какой подход мне нужно использовать для развертывания этих артефактов с помощью mvn deploy команды.

Обновлено: pom.xml

    <distributionManagement>
    <repository>
      <id>my-nexus-snapshots</id>
      <name>Internal Snapshot Releases</name>
      <url>http://localhost:9999/repository/maven-snapshots/</url>
    </repository>
    <snapshotRepository>
      <id>my-nexus-releases</id>
      <name>Internal Releases</name>
      <url>http://localhost:9999/repository/maven-releases/</url>
    </snapshotRepository>
  </distributionManagement>
  

settings.xml

     <server>
        <id>my-nexus-snapshots</id>
        <username>user</username>
        <password>user123</password>
    </server>
    <server>
        <id>my-nexus-releases</id>
        <username>user</username>
        <password>user123</password>
    </server>
  

Комментарии:

1. nexus имеет моментальный снимок репозитория, в котором вы можете развернуть артефакт только с версией моментального снимка, и выпуски репозитория, в которых вы развертываете артефакт только с версией выпуска. если вы хотите развернуть в nexus в качестве выпуска, вам нужно перед тем, как изменить содержимое артефакта на 1.0.0-RELEASE или 1.0.0, а затем выполнить развертывание. используйте плагин maven version для изменения версии артефакта.

2. Я хотел бы сохранить версии моментальных снимков как 1.0.0-SNAPSHOT и выпущенные версии как 1.0.0. Возможно ли это сделать?

Ответ №1:

Обычно ваш nexus имеет отдельные репозитории «моментальные снимки» и «релизы». Версии МОМЕНТАЛЬНЫХ СНИМКОВ развертываются в первом, версии без МОМЕНТАЛЬНЫХ СНИМКОВ — во втором. Для развертывания эти репозитории должны быть указаны вами. Вы можете сделать это, добавив раздел distributionManagement в свой pom. Там вы можете определить конкретные цели для обеих целей.

 <distributionManagement>
  <repository>
    <id>releases</id>
    <name>releases</name>
    <url>http://somerepo:8081/nexus/content/repositories/releases/</url>
  </repository>
  <snapshotRepository>
    <id>snapshots</id>
    <name>snapshots</name>
    <url>http://somerepo:8081/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>
  

Комментарии:

1. Да, у меня такая же настройка в моем pom.xml . Но когда я выполняю «развертывание mvn», я получаю эту ошибку

2. И вы действительно проверили это построчно, чтобы не перепутать репозиторий МОМЕНТАЛЬНЫХ СНИМКОВ с репозиторием релизов? Некоторые параметры могут быть чувствительны к регистру.

3. Спасибо за ваш вопрос редактировать: Вы на самом деле перепутали два репозитория. Просто переименуйте <репозитории> в <Репозитории snapshotRepositories> и наоборот.

4. Когда я выполняю «развертывание mvn», как он узнает, следует ли его развертывать в репозиторий моментальных снимков или в выпущенный репозиторий? Разве это не основано на суффиксе «-SNAPSHOT» артефакта ?

5. Да, все было перепутано в моем pom.xml файл. Спасибо!

Ответ №2:

Если вы используете Gradle, это можно сделать в настройках ваших репозиториев.
Просто добавьте URL-адрес maven-snapshots

Например:

  repositories {
        maven {
            url = 'http://nexus.something.com/repository/maven-central/'
        }
        maven {
            url = 'http://nexus.something.com/repository/maven-releases/'
        }
        maven {
            url = 'http://nexus.something.com/repository/maven-snapshots/'
        }
    }