Активировать разные профили Maven в зависимости от текущего модуля?

StackOverflow https://stackoverflow.com/questions/1018720

  •  06-07-2019
  •  | 
  •  

Вопрос

У нас есть многомодульная сборка, в которой используются модули, использующие разные технологии, такие как Java и Flex.Можно ли как-то активировать разные профили на основе скомпилированного в данный момент модуля?

Я попробовал это с активацией типа

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

Но это не сработало, хотя использование ${basedir} допустимо. описано в документации Maven (это ошибка в Maven).Есть ли другая возможность иметь разные активации в зависимости от текущего модуля?Или Maven позволяет активировать профиль только для всех модулей или не позволяет вообще?

Это было полезно?

Решение

Для таких, как я, читающих этот вопрос в поисках ответов, этот вариант использования теперь работает в Maven 3.

В ранних версиях 3 была ошибка, влияющая на эту функцию (см. http: // jira .codehaus.org / browse / MNG-2363 ), но у меня он работает правильно, используя Maven 3.0.4.

Другие советы

После некоторых дополнительных исследований я наконец пришел к выводу, что в текущей версии Maven (2.1.0) это невозможно по двум причинам:

  • Профили Maven не наследуются, поэтому вы не можете определить профиль в родительском POM и активировать его в дочернем POM.
  • Возможности активировать профиль из самого POM я не нашел.Активация не работает с ${basedir}, а активация свойства отвечает только на системные настройки, которые глобально задаются с помощью опции -D.

В 2.2.1 профили наследуются, но проблема $ {basedir} остается. Я нахожусь в одной лодке - мне нужно активировать профиль, основанный на существовании файла в данном проекте. Мои дочерние сборки работают по отдельности просто отлично (унаследованный профиль активируется локальным существующим файлом), но если я запускаю сборку от верхнего родителя, они завершаются неудачно, потому что файл не найден.

Что касается активации на основе файлов, вы можете попробовать удалить $ {basedir}. Мы используем это так:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

Я не знаю, помогает ли это, но я решил похожую проблему с помощью следующего подхода:

<Ол>
  • Я создал и описал профиль в родительском POM, в котором activeByDefault = false . Затем PluginManagement-Section содержит конфигурации для различных плагинов.
  • Дети могут повторно использовать этот профиль и установить activeByDefault = true Это делает профиль активным, но ни один из плагинов не активирован.
  • Но, к счастью, описанные конфигурации плагинов доступны. Вы можете повторно использовать их в детях, определив их в разделе плагинов. Вы просто указываете group- и artifactID и устанавливаете унаследованный = true для каждого плагина, который хотите повторно использовать в дочерних элементах.
  • Надеюсь, это поможет. Извините, что не включил фрагменты кода, но я надеюсь, что все это понятно.

    Вы можете установить свойство в каждом модуле, для которого вы хотите использовать профиль, а затем использовать " свойство " Активация в ваших профилях.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top