2014-12-29 3 views
0

У меня следующая ситуация:профиля Maven пользователя определен свойство

parent.pom 
<profiles> 
    <profile> 
     <id>P1</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      whatever 
     </build> 
    </profile> 
    <profile> 
     <id>P2</id> 
     <activation> 
      <property> 
       <name>prop1</name> 
      </property> 
     </activation> 
     <build> 
      whatever 
     </build> 
    </profile> 

Есть ли способ, что только «МВН чистой установки» на ребенок активирует профиль P2 без необходимости указывать профиль, как «MVN чистой установки - PP2 "или" mvn clean install -Dprop1 "или изменить settings.xml?

prop1 не является конфигурацией или, это просто конфигурация для активации профиля P2.

Я пробовал:

child.pom 
<properties> 
    <prop1>exists</prop1> 
</properties> 

Но это не работает, как я ожидал, благодаря http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Так, еще кто-нибудь делал или нужно что-то подобное?

+0

Вы действительно описываете безусловную активацию, в этом случае вы должны установить '' на 'true' для профиля' P2' (тогда оба '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' по умолчанию будет 'активным'). – mystarrocks

+0

Могу ли я иметь такую ​​ситуацию? 2 профиля активны по умолчанию? – mlecar

+0

И '' и '' предназначены для использования в качестве условий для активации активации, как правило, для '' s, хотя с 'Maven 2.0.9' они могут быть интерполированы. Поддерживаемые переменные - это системные свойства, такие как '$ {user.home}' и переменные среды, такие как '$ {env.HOME}'. – mystarrocks

ответ

1

Что вы здесь описываете, это действительно случай, когда вы хотите активировать профиль без каких-либо условий. Таким образом, вы сможете достичь этого через <activeByDefault>.

В вашем случае, если вы установите <activeByDefault> из P2 в true, вы увидите, что и профили P1 и P2 (и любые такие профили) активируются по умолчанию (да, вы можете активировать столько profile с вами хочу этот путь). Вы можете проверить это поведение таким образом:

mvn help:active-profiles

Тщательный с предупреждением о таких профилей, хотя:

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

На <exists> и <missing>, они на самом деле предназначены для использования для файлов, хотя, как из Maven 2.0.9, эти метки могут быть интерполированы. Цитируя документ,

Этот пример будет вызывать профиль, когда сгенерированный файл целевых/сгенерированные-источники/axistools/wsdl2java/орг/Apache/Maven является отсутствует.

<profiles> 
    <profile> 
    <activation> 
     <file> 
     <missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing> 
     </file> 
    </activation> 
    ... 
    </profile> 
</profiles> 

По Maven 2.0.9, теги и может быть интерполированное. Поддерживаемые переменные - это системные свойства, такие как $ {user.home} и переменные окружения, такие как $ {env.HOME}. Обратите внимание: , что свойства и значения, определенные в самом POM, недоступны для интерполяции здесь, например. описанный выше активатор не может использовать $ {project.build.directory}, но ему необходимо жестко закодировать целевой путь.

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