Активировать разные профили Maven в зависимости от текущего модуля?
Вопрос
У нас есть многомодульная сборка, в которой используются модули, использующие разные технологии, такие как 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>
Я не знаю, помогает ли это, но я решил похожую проблему с помощью следующего подхода:
<Ол> activeByDefault = false
. Затем PluginManagement-Section содержит конфигурации для различных плагинов. activeByDefault = true
Это делает профиль активным, но ни один из плагинов не активирован. унаследованный = true
для каждого плагина, который хотите повторно использовать в дочерних элементах. Надеюсь, это поможет. Извините, что не включил фрагменты кода, но я надеюсь, что все это понятно.
Вы можете установить свойство в каждом модуле, для которого вы хотите использовать профиль, а затем использовать " свойство " Активация в ваших профилях. Р>