SNAPSHOT версионирование.md
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Struchkov Mark 2024-10-02 22:13:34 +03:00
parent e8326a6711
commit 64ffad807c
No known key found for this signature in database
GPG Key ID: A3F0AC3F0FA52F3C
2 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,70 @@
---
aliases:
tags:
- maturity/🌱
date: 2024-10-02
zero-link:
parents:
linked:
---
В 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.
```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 это можно указать следующим образом:
```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|00 Maven]]
**Родитель**:: [[SNAPSHOT версионирование|SNAPSHOT версионирование]]
**Источник**::
**Создана**:: [[2024-10-02]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->

View File

@ -41,3 +41,7 @@ linked:
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
- [[SNAPSHOT версионирование в Maven]]
<!-- SerializedQuery END -->