Подтвердить что ты не робот

Разрешить локально созданные снимки для переопределения более поздних удаленных снимков

У нас есть большой мультимодульный проект maven. С целью увеличения производительности разработки мы недавно начали развертывать снимки в удаленном репозитории (через центральную сборку) и вводили профили maven, которые означают, что пользователям нужно только проверить и построить подмножество модулей и сделать снимки для остальных. Мы также установили политику обновлений для удаленных репозиториев "никогда", чтобы убедиться, что она явна, когда мы хотим обновлять локальные снимки. Таким образом, типичная команда; mvn -Pref -U чистая установка.

Теперь, в реакторе maven, сборка для модулей, определенных в профиле, отлично работает, maven использует моментальные снимки для своих зависимостей, включая загрузку любых обновленных из удаленного репозитория (важно отметить, чтобы мы имели согласованный набор моментальные снимки, наше центральное развертывание - это все моментальные снимки модуля из нашего проекта, даже если только их несколько изменили).

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

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

Что другие люди сделали в этом сценарии?

спасибо,

Пол

4b9b3361

Ответ 1

Если вы можете обновить до Maven 3, вы можете использовать переключатель командной строки --no-snapshot-updates (-nsu также работает, чтобы сохранить ввод текста). Там ошибка с этой опцией, которая исправлена ​​в версии 3.0.4, поэтому убедитесь, что вы используете последнюю версию.

Вы также можете попробовать автономный режим, но это остановит ВСЕ проверки обновлений, пока вы не перестанете быть "автономными". Сначала создайте сборку, чтобы убедиться, что все зависимости загружены в локальный репозиторий. Затем вы можете войти в автономный режим, добавив <offline>true</offline> в свой файл settings.xml(и переключив его на false, когда вы снова будете готовы к проверке обновлений) или с помощью переключателя командной строки -o или --offline, когда делая сборку. Это работает в Maven 2 или 3.

Ответ 2

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

"это самый последний и самый лучший моментальный снимок, выберите меня старше (в ощущение метки времени) моментальные снимки"

Я думаю, вы могли бы сделать некоторые jiggery-pokery для ваших локальных снимков, например ссылку на script на фазу install, которая устанавливает метаданные временной метки моментального снимка в далеком будущем (поэтому Maven всегда выбирает локальную удаленную снимок). Но мне это совсем не нравится!

Внедрение моментальных снимков может быть инициировано с помощью фиксации источника. Вы можете сделать это вместо этого?

Ответ 3

Проблема с тем, какие артефакты должны быть обновлены и что не нужно обновлять, - очень сложная проблема не только для maven, но и для пользователя. Мейвен не ИИ. Я думаю, вы можете создать свой проект в автономном режиме, чтобы избежать загрузки артефактов (но, конечно, артефакты, которые вы хотите обновить, не будут обновляться).

3 года назад мы попытались решить эту проблему следующим образом: build (ваша центральная сборка) должна содержать только версии (без снимков). Там - вы можете быть уверены, что если вы строите проект - он стабилен тем же кодом. Если вы меняете какой-то артефакт, вы делаете моментальный снимок модуля, и при выполнении работы вы создаете зависимости от версии и обновления. Но, это приводит к другой проблеме: если у вас нет большой системы автоматических тестов, вы можете потратить много времени только на создание версий (ошибка → исправить → версия → ошибка → исправить → версия → и т.д.).

Сегодня я работаю в небольшой команде, и если кто-то обновит его часть, он просто сказал, что и все, кто хочет обновления - возьмите его, а кто нет - не возьмите.

Я не гуру в таких вопросах. Поэтому я буду рад услышать более простой способ избежать этой проблемы.

Ответ 4

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

  • mvn -U зависимость: дерево
  • mvn test

На первом этапе обновление моментального снимка без создания чего-либо и выполняется очень быстро.

Затем вторым шагом является регулярная сборка/тест, но БЕСПЛАТНЫЕ моментальные снимки.