Нужно ли дублировать конфигурацию плагина в профилях Maven?

Я использую rpm-maven-plugin для создания RPM, который устанавливает мой проект Java. . Мне нужно собрать пакеты RPM как для CentOS 5, так и для CentOS 7. Я уже использую профили для установки свойств, содержащих имена некоторых зависимостей RPM, которые различаются между ними, а затем ссылаюсь на эти свойства в подключаемом модуле rpm.

Теперь мне нужно также изменить файлы, которые RPM помещает на основе профилей cent5 и cent7 (cent 5 по-прежнему использует сценарии инициализации, cent 7 перешел на юнит-файлы с помощью systemd). Я не могу придумать простой способ сделать это, установив свойства, мне нужно включить в каждый из них разные сопоставления файлов. Нужно ли мне дублировать мою (длинную) конфигурацию плагина RPM в двух профилях, чтобы получить изменения? Это кажется опасным, потому что конфигурация плагина длинная, а дублирование неизбежно приведет к тому, что разработчики будут вносить будущие изменения в один и пропускать другой. Есть ли способ просто добавить в конфигурацию плагина профиль?

Как лучше всего управлять небольшим изменением сложной конфигурации плагина в профилях maven?


person tdimmig    schedule 18.04.2016    source источник
comment
Как насчет использования агрегации Maven (с подмодулями) и наследование (с родительским POM). См., например, Maven и Profiles:....   -  person Gerold Broser    schedule 19.04.2016
comment
Прочитав эти ссылки, я, кажется, убедился, что попадаю в ловушку, пытаясь использовать профили для всего, вместо того, чтобы использовать стратегии, разделенные на несколько POM. Я думаю, что механизм наследования даст мне то, что мне нужно. Общие этапы сборки в одном, унаследованные еще двумя POM, характерными для целевых ОС. У меня будет плагин RPM, определенный в обоих, с небольшими изменениями в них, но это нормально, если я куплю масштабируемое решение, когда неизбежно появятся новые различия. Если бы вы опубликовали это как ответ, я бы принял это.   -  person tdimmig    schedule 19.04.2016


Ответы (1)


Используйте агрегацию Maven (с подмодулями):

Наследование и агрегирование создают удобную динамику для управления сборками с помощью единого POM высокого уровня. Вы часто будете видеть проекты, которые одновременно являются и родительскими, и агрегаторами.

и наследование (с родительским POM):

Родительский проект — это проект, который передает свои значения дочерним. Многомодульный проект просто управляет группой других подпроектов или модулей.

См. также этот ответ на Maven and Profiles: ....

person Gerold Broser    schedule 19.04.2016