digital-garden/dev/other/SNAPSHOT версионирование в Maven.md
Struchkov Mark 64ffad807c
All checks were successful
continuous-integration/drone/push Build is passing
SNAPSHOT версионирование.md
2024-10-02 22:13:34 +03:00

4.6 KiB
Raw Blame History

aliases tags date zero-link parents linked
maturity/🌱
2024-10-02

В Maven проекте версия указывается в файле pom.xml. Если нужно указать, что версия артефакта является временной, вы добавляете суффикс -SNAPSHOT к номеру версии. Пример:

<version>1.0.0-SNAPSHOT</version>

Эта строка указывает, что артефакт находится в стадии разработки и может изменяться перед выпуском финальной версии.

Механизм обновления SNAPSHOT-версий

SNAPSHOT-версии в Maven хранятся в центральном или локальном репозитории сборки и могут обновляться без изменения самой версии. Когда проект компилируется и отправляется в репозиторий, создается новая сборка с тем же номером версии, но внутри репозитория добавляются уникальные метаданные для отслеживания изменений. Эти метки времени позволяют Maven различать разные сборки SNAPSHOT, даже если версия формально остаётся той же.

Пример метаданных SNAPSHOT-версии: 1.0.0-20231002.123456-1 (где дата и уникальный идентификатор сборки указаны в имени файла).

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

Настройка поведения обновления SNAPSHOT может быть указана в файле settings.xml или в конфигурации репозиториев в pom.xml.

<repository>
  <id>my-repo</id>
  <url>http://myrepo.com/maven2</url>
  <snapshots>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
  </snapshots>
</repository>

Здесь updatePolicy может принимать следующие значения:

  • always: Maven будет всегда проверять наличие новой SNAPSHOT-версии.
  • daily: Проверка новых версий один раз в день.
  • interval:X: Проверка новых версий каждые X минут.
  • never: Maven не будет проверять новые версии, используя кешированные данные.

По умолчанию Maven хранит скачанные SNAPSHOT-версии в локальном репозитории (~/.m2/repository), и это может вызвать проблемы с устаревшими зависимостями. Если в репозитории была опубликована новая версия, а у вас в кэше осталась старая, это может вызвать ошибки. Чтобы избежать таких ситуаций, можно использовать команду mvn clean install -U, которая принудительно обновляет SNAPSHOT-зависимости из удалённого репозитория.

Если вы используете внешний репозиторий для хранения SNAPSHOT-версий, в pom.xml это можно указать следующим образом:

<repositories>
  <repository>
    <id>snapshot-repo</id>
    <url>http://repository.example.com/snapshots</url>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

Мета информация

Область:: ../../meta/zero/00 Maven Родитель:: SNAPSHOT версионирование Источник:: Создана:: 2024-10-02 Автор::

Дополнительные материалы

Дочерние заметки