Руководство по 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 бронзовых знака