Maven: мультимодальные проекты и управление версиями
Каковы наилучшие практики для версий программного обеспечения и проектов с несколькими модулями с Maven?
Я имею в виду, когда я создаю проект мультимодулей с Maven, каков наилучший подход для управления версиями? Использовать одну версию для всех модулей (определенных в верхнем проекте)? Использовать версию для каждого модуля (определенного в POM каждого модуля)? Есть ли другой подход, который мне не хватает? Каковы плюсы и минусы каждого подхода?
В общем, разные модули, выпущенные вместе (возможно, с одним и тем же номером версии)?
Спасибо
Ответы
Ответ 1
Честно говоря, это зависит от того, что вы хотели бы сделать. Многомодульные проекты создаются по нескольким причинам, из которых вам нужно только развернуть то, что изменилось, а не все модули.
Подумайте об этом так: если у вас был не-мультимодульный проект, и вам нужно было только изменить одну строку на уровне служб, вам нужно перестроить весь проект и снова развернуть весь код... даже хотя только ваш уровень обслуживания изменится.
С многомодульными проектами вы можете регенерировать свой проект и развертывать только то, что изменилось... вашими услугами. Это снижает риск, и вы уверены, что изменился только ваш сервисный модуль.
У вас также есть множество преимуществ для использования многомодульных проектов, которые я не перечисляю здесь, но, безусловно, огромная выгода не позволяет поддерживать номера версий ваших модулей в синхронизации.
Когда вы создаете свой проект, подумайте о его развертывании в репозитории, который будет содержать все совместимые баннеры для сборки (каждая сборка создает новую папку с номером версии pom-most pom). Таким образом, вам не нужно хранить документацию о том, какие банки совместимы... все они просто развернуты вместе с номером сборки.
Ответ 2
Я искал решение для этой точной проблемы, и versions-maven-plugin был именно тем, что мне нужно. Мне не нравится плагин релиза, сообщающийся с системой SCM. Плагин версий делает именно то, что нам нужно: он устанавливает номер новой версии во всех помесях проекта:
mvn versions:set -DnewVersion=2.0.0
Затем я могу продолжить коммиты, теги и официальную сборку сборки сборки...
ИЗМЕНИТЬ
Плагин версий зависит от того, как был организован многомодовый проект maven: в результате он часто не обновляет все файлы POM в сложном многомодульном проекте.
Я обнаружил, что sed и find делают работу гораздо надежнее:
sed -i 's/1.0.0-SNAPSHOT/1.0.0-RC1/g' `find . -name 'pom.xml'`
Ответ 3
Обычно вы создаете многомодульный проект, потому что считаете, что различные модули являются частью единого целого. Может быть, клиентский кусок, контрольный кусок и сервисный кусок. Или, может быть, пользовательский интерфейс с сервисами.
В любом случае имеет смысл иметь номера версий для различных модулей для перемещения в блокировке. Однако Maven не применяет это правило, как правило.
Что касается вашего вопроса
- это разные модули, выпущенные вместе (возможно, номер версии)
Я бы так подумал. Это одна из причин того, что он является мультимодульным проектом. В противном случае модули могут быть независимыми.
Конечно, это тот материал, который изобилует редкими случаями и исключениями; -)