Рекомендации Maven, касающиеся управления версиями большого проекта и избегания версий, содержащих выражения

Я ищу реструктуризацию большой проект Maven ...

Базовый обзор нашей текущей структуры:

build [MVN plugins, third party dependency management]:5.1
   NRW Utils:6.0.0.0-beta12-SNAPSHOT
      server-utils:6.0.0.0-beta12-SNAPSHOT
      ... 
   CMW Root:6.0.0.0-beta12-SNAPSHOT
      cmw-webapp:6.0.0.0-beta12-SNAPSHOT
      cmw-core [dependencies on NRW Utils]:6.0.0.0-beta12-SNAPSHOT
      ...
   NRW Root :6.0.0.0-beta12-SNAPSHOT
      nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-beta12-SNAPSHOT
      ...

Причина изменения:

Размер каждого коллективного модуля (т.е. NRW Utils, CMW Root и NRW Root) становится больше и процесс сборки начинает занимать невыносимое количество времени (иногда ~ 4 часа).

Новый план:

build [MVN plugins, third party dependency management]:5.1
   NRW Utils:6.0.0.0-NU-beta4-SNAPSHOT
      server-utils:6.0.0.0-NU-beta4-SNAPSHOT
      ... 
   CMW Root:6.0.0.0-CMW-beta12-SNAPSHOT
      cmw-webapp:6.0.0.0-CMW-beta12-SNAPSHOT
      cmw-core [dependencies on NRW Utils]:6.0.0.0-CMW-beta12-SNAPSHOT
      ...
   NRW Root :6.0.0.0-NRW-beta9-SNAPSHOT
      nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-NRW-beta9-SNAPSHOT
      ...  

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

Также стоит отметить, что на самом деле существует 5 различных «коллективных модулей» (а не только 3), и все они должны быть построены с разными версиями (отличающимися уникальными ключами), поэтому я подумал, что было бы неплохо иметь централизованное место для версий, а не дублирование свойств в 5 разных POM.

Теперь проблема заключается в содержимом файлов POM при определении зависимостей модулей в другом «коллективном модуле» другой версии.

Предлагаемое решение для управления версиями зависимостей:

build [MVN plugins, third party dependency management]:5.1
   nrw-version-management:6.0.0.0-beta-SNAPSHOT
      [contains properties defining latest versions of each collective module]   
      NRW Utils:6.0.0.0-NU-beta4-SNAPSHOT
         server-utils:6.0.0.0-NU-beta4-SNAPSHOT
         ... 
      CMW Root:6.0.0.0-CMW-beta12-SNAPSHOT
         cmw-webapp:6.0.0.0-CMW-beta12-SNAPSHOT
         cmw-core [dependencies on NRW Utils]:6.0.0.0-CMW-beta12-SNAPSHOT
         ...
      NRW Root :6.0.0.0-NRW-beta9-SNAPSHOT
         nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-NRW-beta9-SNAPSHOT
         ... 

nrw-version-management (pom.xml):

...

    com.project
    build
    5.1

com.project
nrw-versions-manager
6.0.0.0-beta-SNAPSHOT
Version Maven Properties
A centralised place for all module property versions
pom

    6.0.0.0-NU-beta4-SNAPSHOT
    6.0.0.0-CMW-beta12-SNAPSHOT
    6.0.0.0-NRW-beta9-SNAPSHOT

...

CMW Root (pom.xml):

...

    com.project
    nrw-versions-manager
    ${nrw.core.version}
    ...

com.project
CMW-root
6.0.0.0-CMW-beta12-SNAPSHOT
pom

    
        ...
        
            ${project.groupId}
            server-utils
            ${nrw.utilities.version}
        
        ...


    
        all
        
            cmw-webapp
            cmw-core
            ...
        
    
    ...

...

N.B. тогда для свойства $ {nrw.core.version} будет установлено значение 6.3.0.0-beta-SNAPSHOT для сборки моментального снимка с помощью аргументов командной строки (или значения свойства по умолчанию).

Возможный процесс выпуска (для 6.0.0.0):

  1. Построить модуль сборки 5.1, если он еще не собран
  2. Построить nrw-version-management 6.0.0.0 (чтобы избежать зависимостей от моментальных снимков - однако свойства еще не изменены )
  3. Сборка NRW Utils 6.0.0.0-NU cmd args: -Dnrw.core.version = 6.0.0.0
  4. Сборка CMW Root 6.0.0.0-CMW cmd args: -Dnrw.core.version = 6.0.0.0 -Dnrw.utilities.version = 6.0.0.0-NU
  5. Сборка NRW Root 6.0.0.0-NRW cmd args: -Dnrw.core.version = 6.0.0.0 -Dnrw.utilities.version = 6.0.0.0-NU -Dnrw.cmw.version = 6.0.0.0-CMW
  6. Перестроить nrw-version-management 6.0. 0.0 для репозитория cmd args: -Dnrw.core.version = 6.0.0.0 -Dnrw.utilities.version = 6.0.0.0-NU -Dnrw.cmw.version = 6.0.0.0-CMW
  7. Сборка nrw-version-management 6.1.0.0-beta-SNAPSHOT с новыми версиями dev и обновленным файлом POM

Проблема:

Процесс сборки кажется долгим, особенно в отношении модуля nrw-version-management. Кроме того, я начал видеть это предупреждение:

'версия' содержит выражение, но должно быть константой

И, проведя некоторое исследование, я теперь понимаю, что выражения не рекомендуются при установке версий (при указании родительского POM):

Вопросы:

  • Могу я просто игнорировать это предупреждение? Некоторые сообщения начинают предполагать, что было бы приемлемо указать родительские версии POM с помощью свойств.
  • Является ли этот общий подход традиционным? Или ошибочные?
  • Есть ли лучшие решения для реструктуризации этого растущего проекта?

Заранее спасибо.

5
задан Community 23 May 2017 в 12:19
поделиться