What exactly is a Maven Snapshot and why do we need it?
Что именно представляет собой моментальный снимок Maven и зачем он нам нужен?
Я немного сбит с толку значением Maven Snapshot и зачем мы его создаем?
Переведено автоматически
Ответ 1
Версия моментального снимка в Maven еще не выпущена.
Идея заключается в том, что перед тем, как будет выполнен релиз 1.0 (или любой другой релиз), существует 1.0-SNAPSHOT. Эта версия - то, чем может стать1.0. По сути, она "1.0 в разработке". Это может быть близко к реальному 1.0 релизу или довольно далеко (например, сразу после 0.9 релиза).
Разница между "реальной" версией и версией моментального снимка заключается в том, что моментальные снимки могут получать обновления. Это означает, что при загрузке 1.0-SNAPSHOT сегодня файл может отличаться от файла, загруженного вчера или завтра.
Обычно зависимости от моментальных снимков должны только существовать во время разработки, и ни одна выпущенная версия (т. Е. Ни одна не-моментальный снимок) не должна зависеть от версии моментального снимка.
Ответ 2
Три других ответа дают вам хорошее представление о том, что такое -SNAPSHOT версия. Я просто хотел добавить некоторую информацию о поведении Maven при обнаружении SNAPSHOT зависимости.
Когда вы создаете приложение, Maven будет искать зависимости в локальном репозитории. Если стабильная версия там не найдена, программа выполнит поиск в удаленных репозиториях (определенных в settings.xml или pom.xml), чтобы получить эту зависимость. Затем он скопирует его в локальный репозиторий, чтобы сделать доступным для следующих сборок.
Например, foo-1.0.jar библиотека рассматривается как стабильная версия, и если Maven найдет ее в локальном репозитории, она будет использовать эту версию для текущей сборки.
Теперь, если вам нужна foo-1.0-SNAPSHOT.jar библиотека, Maven будет знать, что эта версия нестабильна и может быть изменена. Вот почему Maven попытается найти более новую версию в удаленных репозиториях, даже если версия этой библиотеки найдена в локальном репозитории. Однако эта проверка выполняется только один раз в день. Это означает, что если у вас есть foo-1.0-20110506.110000-1.jar (т. е. Эта библиотека была сгенерирована 05.01.06 в 11:00: 00) в вашем локальном репозитории, и если вы снова запустите сборку Maven в тот же день, Maven не будет проверять репозитории на наличие более новой версии.
Maven предоставляет вам способ изменить эту политику обновления в определении вашего репозитория:
всегда: Maven будет проверять наличие более новой версии при каждой сборке;
ежедневно, значение по умолчанию;
интервал: XXX: интервал в минутах (XXX)
никогда: Maven никогда не будет пытаться получить другую версию. Он будет делать это, только если она не существует локально. В зависимости от конфигурации, SNAPSHOT версия будет обрабатываться как стабильные библиотеки.
(модель приложения settings.xml можно найти здесь)
Ответ 3
Термин "МОМЕНТАЛЬНЫЙ СНИМОК" означает, что сборка представляет собой моментальный снимок вашего кода в данный момент времени.
Обычно это означает, что эта версия все еще находится в интенсивной разработке.
Когда код будет готов и придет время его выпускать, вы захотите изменить версию, указанную в POM. Тогда вместо "МОМЕНТАЛЬНОГО СНИМКА" вы бы использовали метку типа "1.0".
"Релиз" - это окончательная сборка для версии, которая не меняется.
"Моментальный снимок" - это сборка, которая может быть заменена другой сборкой с тем же именем. Это подразумевает, что сборка может измениться в любое время и все еще находится в активной разработке.
У вас есть разные артефакты для разных сборок, основанных на одном и том же коде. Например. у вас может быть один с отладкой, а другой без. Один для Java 5.0 и один для Java 6. Как правило, проще иметь одну сборку, которая делает все, что вам нужно. ;)