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

Наследование Maven2

Если у меня есть родительский pom и вы хотите наследовать это несколько проектов. Обычно я делаю это, добавляя в начало проекта <parent> ... </parent>. То, что мне не нравится в этом подходе, заключается в том, что если что-то меняется в моем родителе, я должен отредактировать весь проект, который наследуется этим родителем, чтобы изменить номер версии. Есть ли лучший подход? Надеюсь, это понятно, что я пытаюсь объяснить.

Спасибо заранее.

4b9b3361

Ответ 1

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

Да, есть! Посмотрите Плагин версий Maven, в частности:

версии: update-child-modules обновляет родительский раздел дочерние модули проекта, поэтому версия соответствует версии текущий проект.
Например, если вы иметь агрегаторный пом, который также родитель для проектов, которые он агрегатов и детей и родителей версии выходят из синхронизации, этот mojo может помочь исправить версии ребенка модули.
(Обратите внимание, что вам может потребоваться вызвать Maven с опцией -N, чтобы выполните эту задачу, если ваш проект так плохо, что он не может построить из-за неправильной версии версии).


Изменить: Конечно, используя Maven3, вы можете теперь иметь < версия > -less <parent> в дополнительных модулях:

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

Ссылка

Ответ 2

При выполнении выпуска вы можете использовать Maven Release Plugin. Он автоматически обновит все номера версий и создаст тег в вашем исходном элементе управления (если у вас настроен SCM в POM).

Мои команды для выполнения релиза обычно следующие, после чего я экспортирую тег из SCM и создаю его с помощью "mvn clean package" или "mvn clean deploy".

  svn update   (or whatever SCM you use)
  mvn clean
  mvn release:prepare -DautoVersionSubmodules=true
  mvn release:clean

Так, например, если ваша версия первой "1.0-SNAPSHOT", то плагин release создаст тег "projectname-1.0" с версией "1.0" и, наконец, добавит текущую версию в "1.1-SNAPSHOT". Плагин спросит вас о версиях и имени тегов, чтобы вы могли переопределить значения по умолчанию.

Ответ 3

Автоматическое управление версиями Родитель (т.е. опущение тега) является спорным вопросом в пространстве Maven. Произошел дефект. На данный момент это рассматривается как исправление или улучшение в ветке версии 2.1,

Ответ 4

Вы должны сохранять свои версии в виде снимков, пока не будет выпущено время. Таким образом, вам не придется менять его каждый раз, когда вы меняете pom. Однако, как только вы выпустили родительский pom, вы захотите внести изменения ко всем детям (при условии, что родительский элемент находится вне сборки "реактора"... в противном случае все это было бы связано с плагином выпуска). Существует относительно новый плагин, называемый версией-maven-plugin, который может помочь с изменением версий.

Ответ 5

Я думаю, что важно понять, что в мультимодульной сборке maven всегда использует версию из вашего локального репозитория. Это также относится к многомодульным сборкам! Поэтому, когда вы ссылаетесь на "родительский" pom, вы получаете опубликованный родительский артефакт из вашего локального репозитория maven. Поэтому, когда вы выполняете mvn install, вы повторно публикуете каждый модуль в своем локальном репо.

При разработке ваши собственные модули, вероятно, версируются на что-то вроде X.X-SNAPSHOT. Ссылка на родительский pom - X.X-SNAPSHOT. Не изменяйте их, прежде чем вы будете готовы к выпуску.

Итак, простой случай: Перед первым выпуском все модули называются 1.0-SNAPSHOT. Когда вы начнете выпуск "золотой сборки", переименуйте все модули 1.0-SNAPSHOT в 1.0. При запуске разработки версии 1.1 вы меняете все номера версий на 1.1-SNAPSHOT. И так далее...

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

Edit: После некоторых мыслей я думаю, что некоторые из ваших замешательств в разделе "комментарии" возникают из этого: номер версии в вашем pom отражает общую версию приложения. Любое заданное изменение pom не обязательно изменяет номер версии приложения. Если вам нужно отслеживать изменения в pom, я бы предложил использовать систему управления версиями. Поэтому в течение 3-месячного периода вы работаете над версией 1.0, разумно сохранить номер версии в 1.0-SNAPSHOT. В (например) 3-недельном периоде вы работаете на 1.1, номер версии - 1.1-SNAPSHOT.