Наследство Maven2 - PullRequest
       16

Наследство Maven2

17 голосов
/ 13 февраля 2009

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

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

Ответы [ 5 ]

16 голосов
/ 31 июля 2009

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

Да, есть! Взгляните на плагин Maven Versions , а именно:

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


Редактировать: Конечно, используя Maven3, теперь вы можете иметь элементы -less в подмодулях:

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

Ref

8 голосов
/ 15 февраля 2009

Вы можете использовать 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», плагин релиза создаст тег «projectname-1.0» с версией «1.0» и, наконец, увеличит текущую версию до «1.1-SNAPSHOT». Плагин запросит у вас версии и имя тега, чтобы вы могли переопределить значения по умолчанию.

6 голосов
/ 15 февраля 2009

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

3 голосов
/ 12 апреля 2009

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

2 голосов
/ 13 февраля 2009

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

При разработке ваши собственные модули , вероятно, имеют версии, аналогичные X.X-SNAPSHOT. Ссылка на родительский помп 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.

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