2013-09-19 4 views
5

Привет Я пытаюсь добиться чего-то вроде этого:Maven - активировать профиль на основе проекта собственности

В родительском ПОМ, у меня есть

<profile> 
    <activation> 
    <property> 
     <name>Compile</name> 
     <value>${project.artifactId}</value> 
    ... 

так, что если я бегу mvn -DCompile=mod1 install под родительским ПОМ, он будет применять настройки профиля только к модулю 1, но не к другим.

Точно так же, если у меня есть

<profile> 
    <activation> 
    <property> 
     <name>Compile</name> 
     <value>${project.packaging}</value> 
    ... 

затем работает mvn -DCompile=war install под родительским П, будет применяться только параметры профиля, чтобы те, которые будут упакованы в войне, но не банка, ни англичанин.

Я пытался, но оно не работает, как ожидалось. Я что-то пропустил? Пожалуйста помоги.

P.S. нет необходимости предлагать обходные пути, поскольку меня интересует только этот метод. Просто ответьте на это невозможно, если это так. Спасибо

ответ

6

Это не будет работать, так ...

Для начала:

И почему она не будет работать от родителей до детей:

  • свойства в родительском ПОМ расширены до вашего ребенка POM даже приходит в картине.

Многие пошли здесь перед вами и не удалось.

Можно было бы задаться вопросом, что вы на самом деле пытаетесь сделать. Вы строите разные артефакты из того же исходного проекта? Возможно, вам нужны еще несколько модулей Maven, чтобы позаботиться о вещах.

+0

Вы говорите, $ {} project.packaging статична и ничего подобного у родителей расширяется до П, а затем на ребенке, она расширяется банку и т. д.? – user1589188

+0

Поскольку вопрос был помечен как «java», давайте будем осторожны, что мы подразумеваем под «static» :). Я имею в виду, что активация профиля оценивается только один раз и, следовательно, на основе '$ {project.packaging}' родителя, вероятно, 'pom'. –

+0

И что действительно смешно в том, что я действительно должен использовать 'mvn -DCompile = $ {project.packaging}'. Так что это не расходуется вообще ... – user1589188

2

Да, вы можете активировать профиль в зависимости один или множество параметров, таких как env переменных.

<project> 
    ... 
    <profiles> 
     <profile> 
      <id>development</id> 
      <activation> 
       <property> 
        <name>!environment.type</name> 
       </property> 
      </activation> 
     </profile> 
    </profiles> 
</project> 

Если вы пытаетесь иметь различную упаковку в зависимости от X, чем вы можете использовать плагин сборки и сделать свою магию там http://maven.apache.org/plugins/maven-assembly-plugin/

Подробнее о свойстве активации

Смежные вопросы