Разрешить локально созданные снимки переопределять более поздние удаленные снимки - PullRequest
18 голосов
/ 26 августа 2011

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

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

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

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

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

спасибо,

Пол

Ответы [ 4 ]

7 голосов
/ 16 мая 2012

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

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

1 голос
/ 08 сентября 2011

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

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

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

Развертывание моментальных снимков может быть вызвано фиксацией контроля версий.Вы можете сделать это вместо этого?

0 голосов
/ 16 ноября 2017

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

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

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

Затем на втором этапе выполняется обычная сборка / тестирование, но БЕЗ обновлений снимков.

0 голосов
/ 01 сентября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...