Я ищу реструктуризацию большой проект 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):
Проблема:
Процесс сборки кажется долгим, особенно в отношении модуля nrw-version-management. Кроме того, я начал видеть это предупреждение:
'версия' содержит выражение, но должно быть константой
И, проведя некоторое исследование, я теперь понимаю, что выражения не рекомендуются при установке версий (при указании родительского POM):
Вопросы:
Заранее спасибо.