Выпуск с Maven - PullRequest
       38

Выпуск с Maven

6 голосов
/ 12 марта 2011

Я недавно выпустил проект maven и не мог перестать думать, что весь процесс очень сложен и подвержен ошибкам. Допустим, у меня есть приложение, которое состоит из 3 модулей A, B и C, каждый из которых имеет свою собственную папку в Subversion и отдельную работу по сборке в Hudson. Каждый модуль имеет родительский POM, который объединяет несколько артефактов. A зависит от B, а B зависит от C. Версии зависимостей определены в POM D верхнего уровня, который является родительским для A, B и C. Он делает только то, что все версии хранятся в одном месте и что во всем проекте используется только одна версия каждого артефакта. Чтобы сделать релиз, я делаю следующее:

  1. Выпуск POM D верхнего уровня с плагином релиза через Hudson.
  2. Начните с C, который больше не зависит.
  3. Измените C для ссылки на выпущенную версию D. Релиз C с плагином релиза.
  4. Введите выпущенную версию C в D, чтобы модули, зависящие от C, можно было выпускать со стабильной версией C.
  5. Снова отпустите D с помощью плагина релиза.
  6. Do 3-5 для B
  7. Do 3-5 для A

После этого у меня есть стабильные сборки без снимков всех артефактов в A, B и C, и я могу собрать их вместе для окончательного стабильного выпуска приложения.

На самом деле у меня было не только 3, но и 20 таких модулей. Теперь я нахожу эту процедуру очень сложной и думаю, что у нее много потенциальных проблем:

  • Мне нужно выпустить D несколько раз, по одному разу для каждого уровня в иерархии зависимостей. В конце концов, у меня есть D только с стабильными версиями A, B и C. Чтобы перейти к следующей версии разработки, мне нужно снова отредактировать D и сослаться на все новые версии моментальных снимков выпущенных модулей. В общем, управление зависимостями должно выполняться вручную, даже при использовании плагина релиза.

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

  • Зависит от 3 разных систем: сервера Subversion, сервера Hudson и сервера архивации Maven. Если только один не работает, я больше не могу отпустить.

  • Время отнимает. В этом процессе много раз сборка, упаковка, выгрузка, загрузка, распаковка и т. Д. Производятся снова и снова для каждого выпускаемого мной модуля. Много избыточного обмена данными с архивом происходит. Но на самом деле все может быть сделано локально, поскольку у Хадсона есть весь необходимый исходный код. Только один раз в конце необходимо загрузить окончательный пакет.

  • Скажем, я потерял пакеты на сервере архивации. Нет простого способа сказать Хадсону проверить версии с тегами и перестроить их в правильном порядке.

Почему это не так просто, как проверить весь код за один раз, адаптировать одну глобальную версию, собрать и протестировать ее, зафиксировать, пометить коммит и, наконец, загрузить двоичные файлы?

Спасибо за любые идеи по этому поводу.

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Это может быть так просто.Используя родительский pom, вы можете сделать так, чтобы все ваши модули указывали на одного и того же родителя.Затем установите версию дочерних модулей: ${version.properties}, когда вы запускаете сборку, запустите ее с mvn -Dversion.properties x.y.x-SNAPSHOT (для dev) или x.y.z для производственной сборки, тогда все модули будут развернуты одновременно с одной и той же версией.

Таким образом, для автоматической сборки необходимо указать <version.properties>1.1.1-SNAPSHOT</version.properties> в файле settings.xml, а затем, если вам нужен выпущенный продукт, укажите дополнительный параметр во время выполнения с -Dx.y.z для переопределения файла settings.xml.

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

0 голосов
/ 12 марта 2011

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

...