Проблема, для которой я не могу найти хорошее, масштабируемое решение:
У меня есть проект, который предоставляет несколько разновидностей данного артефакта. Это был многомодульный проект, в настоящее время с 3 модулями:
Дело в том, что у меня есть еще 50 проектов, которые необходимо настроить таким же образом, т.е. предоставить 3 варианта.
Рассмотрены решения:
Есть идеи, как это сделать красиво? Есть ли другой вариант?
Спасибо, Lukasz
Редактировать:
Другим вариантом было бы расширение цели maven -реактора -плагина с реактором :инъекцией -модулей , который загружал бы определение модуля из внешнего артефакта и прикрепите его определение как обычный модуль. Это создаст новый модуль на лету. Тогда все 50 проектов могут сделать этот pom.xml своим родителем.
Конфигурация будет выглядеть следующим образом (черновик):
org.apache.maven.plugins
maven-reactor-plugin
1.0
inject
initialize
inject-modules
flavour1_module
[ groupId ]
[ version ]
flavour2_module
[ groupId ]
[ version ]
flavour3_module
[ groupId ]
[ version ]
Имеет ли смысл идти по этому пути?
Обновление:
Написание подключаемого модуля, который манипулирует списком модулей для выполнения (идея внедрения модуля, описанная выше ), кажется невозможной для реализации, поскольку модули обрабатываются ядром maven, и этот механизм не предназначен для расширения с помощью плагина. Это подтверждается тем фактом, что оба плагина выполняют одинаковую работу, т.е. манипулируют списком проектов для выполнения:
do трюк, выполняя системный вызов для создания дочернего процесса maven. Для меня это не выход, потому что это очень нестабильное решение. Действительно maven -реактор -плагин стал несовместимым с Maven3.
maven -Invoker -плагин по-прежнему выглядит многообещающе. Плагин изначально был разработан для запуска интеграционных тестов, но его можно было бы использовать для расширения, например. этап компиляции. Но для этого требуется, чтобы дочерние файлы pom.xml -рассматривались как ресурсы и изменялись на лету. Для проблемы, которую я здесь описал, решение было бы слишком сложным и нестабильным. Я бы предпочел что-то более легкое, что могло бы работать в памяти при построении модели maven.
Так что пока использую профили, стараясь сделать их максимально компактными. Вероятно, через какое-то время мне нужно будет снова подумать над проблемой.