Maven: многомодульные проекты и управление версиями - PullRequest
20 голосов
/ 30 ноября 2011

Каковы лучшие практики для версий программного обеспечения и многомодульных проектов с Maven?

Я имею в виду, когда я создаю многомодульный проект с Maven, каков наилучший подход для управления версиями? Использовать единую версию для всех модулей (определено в верхнем проекте)? Использовать версию для каждого модуля (определенную в POM каждого модуля)? Есть ли другой подход, который мне не хватает? Каковы плюсы и минусы каждого подхода?

В общем, выпускаются ли разные модули вместе (возможно, с одним и тем же номером версии)?

Спасибо

Ответы [ 3 ]

6 голосов
/ 30 ноября 2011

Честно говоря, это зависит от того, что вы хотели бы сделать. Многомодульные проекты создаются по нескольким причинам, одна из которых заключается в том, что вам нужно только развернуть то, что изменилось, вместо всех модулей.

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

С многомодульными проектами вы можете восстановить свой проект и развернуть только то, что изменило ... ваши услуги. Это снижает риск, и вы уверены, что изменился только ваш сервисный модуль.

У вас также есть множество преимуществ использования многомодульных проектов, которые я здесь не перечисляю, но, безусловно, есть огромное преимущество, чтобы НЕ синхронизировать номера версий ваших модулей.

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

5 голосов
/ 11 января 2012

Я сам искал решение этой проблемы, и version-maven-plugin был именно тем, что мне было нужно.Мне не нравится плагин релиза, взаимодействующий с системой SCM.Плагин version делает именно то, что нам нужно: он устанавливает новый номер версии во всех poms проекта:

mvn versions:set -DnewVersion=2.0.0

Затем Я могу приступить к коммитам, тегам и официальному серверу сборкиbuild ...

EDIT :

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

sed -i 's/1.0.0-SNAPSHOT/1.0.0-RC1/g' `find . -name 'pom.xml'`
2 голосов
/ 30 ноября 2011

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

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

По вашему вопросу

- это разные модули, выпущенные вместе (возможно, с одним номером версии)

Я бы так подумал.Это одна из причин того, что это многомодульный проект.В противном случае вы могли бы иметь модули как независимые проекты.

Конечно, это тот тип вещей, который изобилует крайними случаями и исключениями; -)

...