2016-10-10 6 views
1

Я работаю с небольшой командой, которая управляет большим количеством очень маленьких приложений (~ 100 портлетов). Каждый портлет имеет свой собственный репозиторий git. Во время некоторого кода, который я просматривал сегодня, кто-то сделал небольшое редактирование, а затем обновил версию pom.xml от 1.88-SNAPSHOT до 1.89-SNAPSHOT. Я добавил комментарий, спрашивающий, действительно ли мы хотим делать релизы, но я действительно не знаю негативных последствий этого.Каковы последствия использования Maven Snapshots?

Почему бы не сделать это? Я знаю, что снимки не должны выпускаться, но почему бы и нет? Каковы последствия использования только моментальных снимков? Я знаю, что maven не будет кэшировать снимки так же, как не-моментальные снимки, и поэтому он может скачивать артефакт каждый раз, но давайте притвориться, что кеширование не имеет значения. С точки зрения управления версиями, почему каждый раз использует версию SNAPSHOT и просто набрасывает номер на плохую идею?

ОБНОВЛЕНИЕ: Каждый из этих проектов приводит к военному файлу, который никогда не будет доступен на репозитории maven за пределами нашей команды, поэтому нет ни одного из нижеперечисленных пользователей.

+1

Это будет использовать моментальный снимок, скорее похожий на версию выпуска, но без преимуществ ... Снимки - это версии dev, которые могут сломаться и развиваться в любое время. См. Также http://stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it. В ответах на этот вопрос обсуждаются. – Tunaki

+0

Каковы преимущества? Помимо кэширования? Мой вопрос не в том, что концепты SNAPSHOTS. Я понимаю намеченную цель. Мой вопрос в том, каковы фактические выгоды от использования снимков для релизов, в частности, для внутренних развернутых войн, которые никогда не будут на публичном репозитории maven? – xdhmoore

+0

Поскольку SNAPSHOT предназначен для использования в артефакте в разработке. Они не предназначены для использования в качестве версии выпуска. Имейте в виду, что вы можете заставить его работать несколько, но каждый разработчик, который знает, что Maven подходит к вашему проекту, ничего не поймет, и это не хорошо ... – Tunaki

ответ

2

Основная причина, по которой вы не хотите этого делать, состоит в том, что вся экосистема Maven основана на конкретном определении того, что такое моментальная версия. И это определение не та, которую вы задаете в своем вопросе: она должна представлять только версию, находящуюся в активной разработке, и не должна быть стабильной версией. Следствие этого является то, что многие из инструментов, построенных вокруг Maven предполагает это определение по умолчанию:

  1. maven-release-plugin не позволит вам подготовить релиз с версией снимки в выпущенной версии. Таким образом, вам нужно прибегнуть к пометке вручную в вашем управлении версиями или создать собственные скрипты. Это также означает, что пользователи этих библиотек не смогут использовать этот плагин с настройкой по умолчанию, им нужно будет установить allowTimestampedSnapshots.
  2. versions-maven-plugin, который может быть использован для автоматического обновления до последней версии, не будет работать должным образом, поэтому ваши пользователи не смогут использовать его без боли в конфигурации.
  3. Менеджеры хранилища, такие как Artifactory или Nexus, встроены в систему с четким различием хранилищ с моментальными снимками и зависимостями релиза. Например, если вы используете общую компанию Nexus по всей стране, ее можно настроить на to purge old snapshots, так что это сломает вам вещи ... Представьте, что кто-то зависит от 1.88-SNAPSHOT, и он полностью удален: вам нужно вернуться во времени и переустановить его , до следующего удаления ... Кроме того, некоторые встроенные репозитории Artifactory могут быть сконфигурированы not to accept любые снимки, поэтому вы не сможете их развернуть; пользователи будут вынуждены снова добавить дополнительную конфигурацию репозитория, чтобы указать на те, которые разрешают моментальные снимки, которые они, возможно, не захотят делать.
  4. Maven - это соглашение до конфигурации, что означает, что все проекты Maven должны пытаться использовать одну и ту же семантику (макет каталога, управление версиями ...). Новые разработчики, которые получат доступ к вашему проекту, будут запутаны и потеряют время, пытаясь понять, почему ваш проект построен так, как он есть.

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

0

Tunaki дал много разумных моментов, почему вы перерывайте лучшие практики Maven, и я полностью поддерживаю эту точку зрения.Но даже если вы не заботитесь о «условностях других компаний», есть причины:

  1. Если вы не делаете CI (и рассматривать каждый строить, как потенциальные выбросы), необходимо провести различие между версиями, которые должны стать продуктивными и теми, кто предназначен только для тестирования. Если все это SNAPSHOT, это трудно сделать.

  2. Если кто-то (случайно) разворачивает второй 1.88-SNAPSHOT, это будет новый 1.88-SNAPSHOT, скрывающий старый (который доступен по конкретной метке времени, но это грязно). Релиз версии не может быть развернут дважды.

Смежные вопросы