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

Проблема, для которой я не могу найти хорошее, масштабируемое решение:

У меня есть проект, который предоставляет несколько разновидностей данного артефакта. Это был многомодульный проект, в настоящее время с 3 модулями:

  • /flavor1 _модуль
  • /flavor2 _модуль
  • /flavor3 _модуль

Дело в том, что у меня есть еще 50 проектов, которые необходимо настроить таким же образом, т.е. предоставить 3 варианта.

Рассмотрены решения:

  1. превращение уже созданного многомодульного проекта в родительский для всех остальных 50 проектов
    • Минусы:Это просто не работает. Инструкции, хранящиеся в родительских модулях, не наследуются, поэтому не выполняются.
  2. использование maven -архетипа -плагина для создания многомодульного -проекта шаблон , а затем создание всех 50 проектов на основе шаблона
    • Минусы:если бы мне понадобился аромат4, мне нужно вручную обновить все 50 проектов, чтобы добавить модуль аромата4 _(и дублировать его содержимое ). Не масштабируется.
  3. встраивание конфигурации всех разновидностей в один pom и включение или отключение их на основе профилей (, т. е. использование композиции по профилям вместо наследования через модули ). Затем указал на него 50 проектов как на их родителя. Это создаст «встроенные» модули
    • Минусы:Мне нужно было бы реализовать собственные механизмы, которые предоставляются модулями из коробки. (напр. создание каждого варианта в отдельном каталоге ). Я бы также потерял четкое разделение, которое обеспечивают модули.

Есть идеи, как это сделать красиво? Есть ли другой вариант?

Спасибо, 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.

Так что пока использую профили, стараясь сделать их максимально компактными. Вероятно, через какое-то время мне нужно будет снова подумать над проблемой.

7
задан Lukasz Guminski 25 April 2012 в 18:08
поделиться