Лучшая стратегия выпуска ПОМов
Я работаю в проекте, в котором есть много автономных моделей maven, и все они вместе составляют приложение. Когда они вносят изменения в любой из модулей и готовят его к выпуску в производство, они обновляют все ДРУГИЕ помпы до новой артефактной версии помпа. Я полагаю, что это является важной вехой для приложения в целом, т. Е. В случае необходимости запустить предыдущую версию проекта, они могут просто выбрать все модули с определенным номером версии из хранилища.
Я думал о том, может ли существовать другая стратегия, основанная главным образом на том факте, что мы обновляем модули pom, которые вообще не изменились.
Пожалуйста, сообщите плюсы и минусы альтернативной "лучшей" стратегии, если она существует.
Спасибо
1 ответ
Трудно быть конкретным в отношении вариантов, потому что мы мало знаем о вашем проекте. Похоже, что так или иначе, спецификации версий зависимостей являются здесь ключевым понятием.
В простом случае, если у меня есть модуль A, который использует модуль B, и я модифицирую модуль B, мне, вероятно, придется изменить модуль A, чтобы обновить информацию о его зависимости. Поскольку зависимости могут быть определены с использованием диапазонов версий, это не обязательно верно; особенно если вы используете что-то вроде настоящей архитектуры REST для изоляции одного модуля от изменений в другом.
Но независимо от того, так ли это, похоже, вы говорите, что, по крайней мере, иногда ваша команда обновляет номер версии модуля, даже не изменяя какую-либо информацию о его зависимости. В крайнем примере, может быть, каждый модуль просто предоставляет сервис со строго стандартизированным интерфейсом; или, может быть, какое-то другое приложение использует модули, но они не используют друг друга; или же...
В этом случае, я думаю, вопрос заключается в том, перевешивает ли стоимость изменения номера версии (буквальная стоимость внесения изменения плюс любое семантическое значение, которое номера версий могут иным образом передать) перевешивает простоту, которую ваша команда может найти из-за наличия синхронизированных номеров версий.
Лично я хотел бы, чтобы номера версий варьировались независимо, и использовал POM "верхнего уровня", который знает, какие версии каждого модуля работают вместе, чтобы сформировать "версию X приложения в целом". Это POM верхнего уровня должно использовать конкретные номера версий, а не диапазоны, чтобы обеспечить воспроизводимые результаты сборки. Затем вы модифицируете любой модуль (модули), который вы изменяете, и вы модифицируете любой модуль, чья информация о прямой зависимости затрагивается (потому что он, вероятно, все равно нуждается в перестроении), и вы модифицируете POM верхнего уровня, и это все.
Но это только мое мнение, и оно охватывает только некоторые распространенные сценарии. Это действительно то, что команда должна определить, основываясь на знании конкретного проекта.