2016-02-10 3 views
7

У меня есть следующий родительский pom.xml файл:Активация дочернего профиля с родительским

<profile> 
    <id>build_full</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>mymodule_interface</module> 
     <module>mymodule_switch</module> 
     <module>mymodule_switch_simulator</module> 
     <module>mymodule_switch_controller</module> 
     <module>mymodule_server</module> 
    </modules> 
</profile> 

и в моем детском ПОМ для mymodule_server, у меня есть следующие:

<profile> 
    <id>subprofile</id> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 
<profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 

Как, когда я invoke maven: mvn -P build_full, могу ли я заставить дочерний модуль (mymodule_server) использовать профиль subprofile, а не default?

ответ

4

Нет, вы не можете активировать дочерний профиль из родительского профиля. В более общем плане, you can't activate or deactivate any profile from any other profile (есть функция-функция JIRA MNG-3309). Что вы можете сделать, это activate two profiles based on the same property.

Прежде всего, использование профиля, который активируется по умолчанию, обычно не является хорошей идеей. Вы хотите активировать профиль на основе некоторого состояния (версия ОС, системное свойство ...). Чтобы решить вашу проблему, вы можете активировать профиль build_full, когда присутствует определенное системное свойство, и убедитесь, что subprofile также активируется при наличии такого же свойства.

Конфигурация образца будет следующей, когда оба профиля активируются, когда системное свойство fullBuild установлено на true. Таким образом, вызов Maven с помощью mvn -DfullBuild=true ... активирует оба профиля.

<profile> 
    <id>build_full</id> 
    <activation> 
     <property> 
      <name>fullBuild</name> 
      <value>true</value> 
     </property> 
    </activation> 
    <modules> 
     <module>mymodule_interface</module> 
     <module>mymodule_switch</module> 
     <module>mymodule_switch_simulator</module> 
     <module>mymodule_switch_controller</module> 
     <module>mymodule_server</module> 
    </modules> 
</profile> 
<profile> 
    <id>subprofile</id> 
    <activation> 
     <property> 
      <name>fullBuild</name> 
      <value>true</value> 
     </property> 
    </activation> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 
+0

Я просто проверял на месте, прежде чем отправлять свой ответ, я, вероятно, сделал ошибку, собирается повторно тест тогда –

+0

@ A.DiMatteo Это должно работать при запуске из родительского ПОМ. Ваше решение также должно работать, но я не нашел всех параметров '-P' (я думаю, что это слишком хрупко) – Tunaki

+1

Я подтверждаю, что оба решения работают хорошо. Действительно, ваше предложение менее подробно из командной строки и централизует активацию в одном общем месте, лучше. –

2

В вашем случае, из верхней папки родителя/агрегатор, вы можете просто запустить:

mvn clean install -Pbuild_full,!default,subprofile 

Это будет отключить любой профиль, имеющий имя default (и, следовательно, отключить профиль в соответствующем суб-модуль) и разрешить любой профиль, имеющий имя subprofile (и, следовательно, включить профиль, который вы хотели).

В качестве альтернативы, можно настроить subprofile как таковой:

<profiles> 
    <profile> 
     <id>subprofile</id> 
     <activation> 
      <property> 
       <name>subprofile</name> 
       <value>true</value> 
      </property> 
     </activation> 
     .... 

, а затем запустить следующим образом:

mvn clean install -Dsubprofile=true -Pbuild_full 

Это будет иметь тот же эффект. Вы даже можете избежать элемента value и просто указать -Dsubprofile, его существования было бы достаточно, чтобы активировать профиль (в этом случае предлагается более содержательное имя, например -DactivateSubprofile). Поскольку вы активируете другой профиль, автоматически Maven дезактивирует значение по умолчанию.

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