Maven snapshot что это
Перейти к содержимому

Maven snapshot что это

  • автор:

Руководство по Maven. Snapshots.

Любое большое приложение состоит из нескольких модулей и, чаще всего над каждым модулем программы работает отдельная команда. Например, одна команда работает над бизнес логикой приложения и они используют проект business-logic (business-logic.jar.1.0), а другая команда работает на внешним видом приложения и разрабатывает проект app-front-end (app-front-end.jar:1.0).

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

Таким образом, если эта команда часто выкладывает обновления, то можем произойти следующее:

  • комнада бизнес логики должна уведомлять команду фронт-ендщиков, когда именно они будут выкладывать обновления;
  • команда front-end должна обновлять свой файл pom.xml для того, чтобы иметь текущую версию продукта.

Для того, что исправить эту ситуацию используется концепция snapshot.

Snapshot

Snapshot – это специальная версия, которая показывает текущую рабочую копию. При каждой сборке Maven проверяет наличие новой snapshot версии на удалённом репозитории.

В этом случае, команда business-logic будет выпускать snapshot своего обновления на репозиторий в виде business-logic:1.0-SNAPSHOT замещая предыдущий jar файл.

Snapshot и Версия

В случае с версией, если Maven однажды загрузил версию business-logic:1.0, то он больше не будет пытаться загрузить новую версию 1.0 из репозитория. Для того, чтобы скачать обновлённый продукт business-logic должен быть обновлён до версии 1.1.

В случае со snapshot, Maven автоматически будет подтягивать крайний snapshot (business-logic:1.0-SNAPSHOT) каждый раз, когда команда front-end будет выполнять сборку своего проекта.

Вот как это выглядит в pom.xml файле:

front-end pom.xml

  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0  front-end  front-end  1.0  jar  maventutorial  http://maven.apache.org   UTF-8     data-service  business-logic  1.0-SNAPSHOT  test      

business-logic pom.xml

  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0  business-logic  business-logic  1.0-SNAPSHOT  jar  maven-tutorial  http://maven.apache.org   UTF-8     

Для того чтобы подтянуть крайний snapshot нам необходимо использовать -U в каждой команде.

 mvn clean package -U 

На этом мы заканчиваем изучение snapshot-ов.
В следующей статье мы рассмотрим управление зависимостями.

Maven – Снимки

Большое программное приложение обычно состоит из нескольких модулей, и это обычный сценарий, когда несколько команд работают над разными модулями одного и того же приложения. Например, рассмотрим команду, работающую над внешним интерфейсом приложения как проект app-ui (app-ui.jar: 1.0), и они используют проект службы данных (data-service.jar: 1.0).

Теперь может случиться так, что команда, работающая над сервисом данных, быстро исправляет ошибки или совершенствуется, и они выпускают библиотеку в удаленное хранилище почти каждый день.

Теперь, если команда службы обработки данных загружает новую версию через день, возникают следующие проблемы:

  • Команда службы данных должна сообщать команде app-ui каждый раз, когда они выпускают обновленный код.
  • Команда app-ui должна регулярно обновлять свой pom.xml, чтобы получить обновленную версию.

Команда службы данных должна сообщать команде app-ui каждый раз, когда они выпускают обновленный код.

Команда app-ui должна регулярно обновлять свой pom.xml, чтобы получить обновленную версию.

Чтобы справиться с такой ситуацией, в игру вступает концепция SNAPSHOT .

Что такое SNAPSHOT?

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

Теперь команда по обслуживанию данных будет каждый раз выпускать обновленный код SNAPSHOT в хранилище, скажем, data-service: 1.0-SNAPSHOT, заменяя более старую банку SNAPSHOT.

Снимок против версии

В случае Версии, если Maven однажды скачал упомянутую версию, скажем, data-service: 1.0, он никогда не будет пытаться загрузить более новую версию 1.0, доступную в репозитории. Для загрузки обновленного кода необходимо обновить версию службы данных до версии 1.1.

В случае SNAPSHOT Maven будет автоматически загружать последнюю версию SNAPSHOT (data-service: 1.0-SNAPSHOT) каждый раз, когда команда app-ui создает свой проект.

app-ui pom.xml

Проект app-ui использует 1.0-SNAPSHOT службы данных.

 xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0  app-ui  app-ui  1.0  jar  health  http://maven.apache.org   UTF-8     data-service  data-service  1.0-SNAPSHOT  test    

служба данных pom.xml

Проект data-service выпускает 1.0-SNAPSHOT для каждого незначительного изменения.

 4.0.0 data-service data-service 1.0-SNAPSHOT jar health http://maven.apache.org UTF-8   

Хотя в случае SNAPSHOT Maven автоматически выбирает последнюю версию SNAPSHOT ежедневно, вы можете заставить maven загрузить последнюю сборку моментального снимка, используя ключ -U для любой команды maven.

mvn clean package -U

Давайте откроем командную консоль, перейдем в каталог C: \> MVN> app-ui и выполним следующую команду mvn .

C:\MVN\app-ui>mvn clean package -U

Maven начнет сборку проекта после загрузки последней версии SNAPSHOT data-service.

Что такое SNAPSHOT при указании версии в pom.xml Maven -a?

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

Ответ написан более трёх лет назад
Нравится 1 6 комментариев
private_tm @private_tm Автор вопроса

т.е. она будет обновляться пока будут выходить 0.8 0.9 и наконец когда выйдет 1.0 перестанет. Нормально ли использовать это в продакшене? Ведь как я понимаю может и интерйфес поменяться проект будет падать с ошибками. Или это только в процесе разработки с помощью конкретной библиотекой?

Это работает не так. В зависимостях Maven всегда нужно использовать конкретную версию. То есть если указана версия 1.0-SNAPSHOT, то она и будет использоваться. Версии 0.8, 0.9, 1.0 — нет. А если указать 1.0 — то, опять же, будет использована она. Смысл в том, что пока идёт разработка — используете 1.0-SNAPSHOT. Когда зарелизились — 1.0 для стабильной версии и что-то типа 1.0.1-SNAPSHOT — для следующей версии в разработке и т.д.

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

private_tm @private_tm Автор вопроса

Руслан Лопатин: понял т.е. минимальнаяч/макимальная версия это не это как в других билд тулах(к примеру композер для пхп).Снепшот это четкая версия версия пре-релиза(но там может постоянно что то меняться условно версия ).

Что означает слово SNAPSHOT в версии библиотеки?

Очень часто при подключении библиотек можно встретить после номера версии слово SNAPSHOT. Пример:

compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' 

Что оно означает?

Отслеживать

задан 12 янв 2016 в 17:59

870 6 6 серебряных знаков 15 15 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

SNAPSHOT означает, что исходники будут дорабатываться в пределах данной версии. Условно говоря, если твоё приложение использует некую библиотеку, помеченную как SNAPSHOT , то её автор, найдя баг или просто внеся дополнительный функционал, а может и удалив что-то, может залить новый jar’ник библиотеки (артефакта), при этом не поменяв версию. Совесть автора будет чиста, а вот твоё приложение, заново потянув библиотеку из репозитория может уже не собраться.

Отслеживать

ответ дан 12 янв 2016 в 18:10

Темка тоже Темка тоже

4,061 11 11 серебряных знаков 23 23 бронзовых знака

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *