#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/'
}
}