Вопрос-ответ

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 предоставляет вам способ изменить эту политику обновления в определении вашего репозитория:

<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>

где XXX может быть:


  • всегда: Maven будет проверять наличие более новой версии при каждой сборке;

  • ежедневно, значение по умолчанию;

  • интервал: XXX: интервал в минутах (XXX)

  • никогда: Maven никогда не будет пытаться получить другую версию. Он будет делать это, только если она не существует локально. В зависимости от конфигурации, SNAPSHOT версия будет обрабатываться как стабильные библиотеки.

(модель приложения settings.xml можно найти здесь)

Ответ 3

Термин "МОМЕНТАЛЬНЫЙ СНИМОК" означает, что сборка представляет собой моментальный снимок вашего кода в данный момент времени.

Обычно это означает, что эта версия все еще находится в интенсивной разработке.

Когда код будет готов и придет время его выпускать, вы захотите изменить версию, указанную в POM. Тогда вместо "МОМЕНТАЛЬНОГО СНИМКА" вы бы использовали метку типа "1.0".

Чтобы получить некоторую помощь по управлению версиями, ознакомьтесь со спецификацией семантического управления версиями .

Ответ 4

"Релиз" - это окончательная сборка для версии, которая не меняется.

"Моментальный снимок" - это сборка, которая может быть заменена другой сборкой с тем же именем. Это подразумевает, что сборка может измениться в любое время и все еще находится в активной разработке.

У вас есть разные артефакты для разных сборок, основанных на одном и том же коде. Например. у вас может быть один с отладкой, а другой без. Один для Java 5.0 и один для Java 6. Как правило, проще иметь одну сборку, которая делает все, что вам нужно. ;)

2023-06-25 07:58 java maven