Как обновить зависимость maven с тем же номером версии в артефактах Azure

Мы изменили наш Maven частный репозиторий Nexus на Azure Artifacts. И когда мы загружаем приватную зависимость maven с какой-то версией, она сообщает нам следующую информацию:

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) в проекте HmapBasic: не удалось развернуть артефакты: не удалось передать артефакт com.hand:HmapBasic:pom:3.0.3-RELEASE из / в dev-azure-com-kohlerdevops-konnect-unified ( https://pkgs.dev.azure.com/KohlerDevOps/_packaging/Konnect-Unified/maven/v1/): не удалось передать файл: https://pkgs.dev.azure.com/KohlerDevOps/_packaging/Konnect-Unified/maven/v1/com/hand/HmapBasic/3.0.3-RELEASE/HmapBasic-3.0.3-RELEASE.pom. Код возврата: 409

Я искал код ошибки 409. Это означает, что мы уже загрузили зависимость с этой версией и не можем загрузить ее снова. Мы хотим использовать новую зависимость, охватывающую старую без изменения версии (потому что, если мы изменим версию, все наши проекты должны изменить pom.xml)

как мы можем сделать это в артефактах Azure?

1 ответ

Я только что провел тест в Azure DevOps, и если вы используете суффикс "SNAPSHOT", он перезапишет предыдущий пакет / артефакт. Например2.0.0-SNAPSHOT.

Как обновить зависимость maven с тем же номером версии в артефактах Azure

Я боюсь, что вы должны изменить pom.xml, я понимаю, как это расстраивает вас. Но это то, что артефакты Azure намеренно предназначены для обеспечения правильности результатов сборки.

Проверьте документ: Понять неизменность пакетов.

Как только вы публикуете конкретную версию пакета в фиде, этот номер версии зарезервирован на постоянной основе. Вы не можете загрузить более новый пакет редакции с тем же номером версии или удалить его и загрузить новый пакет с той же версией.

Причина этого дизайна:

Это потому, что многие клиенты пакетов, включая NuGet, хранят локальный кеш пакетов на вашем компьютере. Как только клиент кэширует конкретный пакет @version, он возвращает эту копию в будущих запросах на установку / восстановление. Если на сервере вы замените пакет @ версия (версия 1) новым пакетом @ версия (версия 2), клиент не сможет определить разницу. клиент все еще использует старую версию в кеше. Это может привести к неопределенным результатам сборки на разных машинах.

Таким образом, мы не могли перезаписать все пакеты, которые уже были загружены, даже мы не могли удалить их и повторно загрузить. Чтобы решить эту проблему, единственный способ - загрузить пакеты с новой версией.

Проверьте мою другую ветку для получения дополнительной информации.

Надеюсь это поможет.

Другие вопросы по тегам