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

1

Учитывая: мультимодульный проект Maven

Задача: обновить версию после каждой версии

Я вижу две разные стратегии:

стратегия 1 - во время обновления: обновлять версии всех модулей, несмотря на то, что были обновления или нет

стратегия 2 - минималистичное обновление: обновить только версию тех модулей, которые были фактически затронуты

Предположим, что мы имеем следующую структуру проекта:

root
---dao
---domain
---web
   ---site1
   ---site2
---processors
    ---processor1
        ---processor1Service
        ---processor1Util
        ---processor1Tests
    ---processor2
        ---processor2Service
        ---processor2Util
        ---processor2Tests
---simulators
    ---simulator1
        ---simulator1Service
        ---simulator1Util
        ---simulator1Tests
    ---simulator2
        ---simulator2Service
        ---simulator2Util
        ---simulator2Tests
---etc

весь родительский pom имеет тип упаковки - pom. Все конечные модули имеют тип создания ресурсов - jar, war, sar и т.д. Root pom содержит секцию dependencyManagement, в которой перечислены все дочерние модули.


стратегия 1:

  • менеджер релиза RM (или кто бы то ни было) объединяет обновления из ветки (функций)
  • все непрерывные продукты интеграции происходят (пусть все будет в порядке)
  • RM вызывает mvn release: versionUpdate -DsetVersion = 1.2 на корне
  • сделанный

стратегия 2:

  • RM объединяет обновления из ветки (функций)

  • все непрерывные продукты интеграции происходят (пусть все будет в порядке)

  • RM проверяет модули, которые на самом деле были затронуты с помощью инструментов subversion (git, svn, что угодно)
  • RM увеличивает версию поврежденных модулей вручную
  • сделанный

стратегия 1:

выгоды:

  1. нет ручного ввода от человека (кроме номера версии, возможно)
  2. конфигурация pom является тривиальной и равномерной, ее можно обрабатывать только на корневой помпе, используя секцию dependencyManagement
  3. единственная версия всех модулей, в результате нет зоопарка версии модуля
  4. не нужно зависеть от внешних инструментов, которые должны проверять, где были фактические обновления (а что еще хуже - зависело от внимательности RM)
  5. разработчики не ограничиваются изменениями, не связанными с их модулем (нет необходимости бояться, если вы добавите новую строку или случайно запустите инструмент автоматического форматирования в среде IDE)

недостатки:

  1. будут обновлены версии модулей, которые на самом деле не были затронуты - в результате возможная проблема с местом на жестком диске

стратегия 2:

выгоды:

  1. будут обновлены версии модулей, которые были фактически обновлены

недостатки:

  1. зоопарк версии. dao_1.2 зависит от domain_1.52, оба зависят от модуля etc_1.639
  2. ручной ввод
  3. зависимость от внешних инструментов, которые должны проверять фактические обновления

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

Теги:
maven
version
multi-module

1 ответ

2
Лучший ответ

Лично я пойду абсолютно для вашей стратегии 1. Что стратегия используется в компании, в которой я работаю. Ваш побочный эффект, который вы упоминаете как пространство на жестком диске или обновление версий модуля, которые не требуется обновлять, - это незначительные проблемы, сравнимые с "версиями zoo".

Только я проголосую за вашу стратегию номер 2 в случае, если вы используете архитектуру OSGI, и для этого требуется очень точная стратегия версии для версии, и если вы обновите всю версию сразу, это разрушит большую выгоду OSGI (hot-deploy only модули/подмодули, которые требуют обновления).

Я также предлагаю вам взглянуть на http://java.dzone.com/articles/why-i-never-use-maven-release, который дает хорошие советы по обновлению версии в проекте с несколькими модулями maven, а также как отслеживается в любом CVS

  • 0
    Спасибо за ответ. Не могли бы вы рассказать мне приблизительно, сколько модулей в вашем проекте для целей статистики. Вы пытались использовать стратегию 2 и разочаровали ее или используете # 1 все время
  • 0
    Хорошо работаем, мы используем архитектуру OSGI, поэтому каждый jar / модуль предоставляет свою собственную версию из-за природы OSGI. Поэтому всякий раз, когда происходит обновление / исправление, требуется только развертываемый jar / модуль, чтобы обновить не весь проект. Но в предыдущем опыте в среде J2EE мы обновили все развертываемые модули / jar за один раз. Вы должны выбрать стратегию в зависимости от вашего "развертываемого юнита". В OSGI развертываемое устройство - это jar, поэтому вы должны выбрать уникальную версию для каждого модуля. В среде J2ee, потому что развертываемое подразделение - это война. Нетрудно обновить все зависимости за один раз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню