Чтобы расширить ответ на вопрос @ богатого продавца и самоответствие @ Бостона, кажется, что невозможно установить установку, где родительский POM определяет несколько профилей в качестве альтернатив, а дочерние POM выбирают один из этих профилей по умолчанию, позволяя временно переопределить выбор для ребенка (т.е. в CLI).Рассмотрим родительский POM для проектов, которые используют некоторые рамки и соответствующий плагин, у которых оба версии мы можем предположить, определяются свойствами:
<profiles>
<profile>
<id>newest</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<framework.version>2.0</framework.version>
<plugin.version>2.0</plugin.version>
</properties>
</profile>
<profile>
<id>older</id>
<activation>
<property>
<name>older.framework</name>
<value>true</value>
</property>
</activation>
<properties>
<framework.version>1.1</framework.version>
<plugin.version>1.1</plugin.version>
</properties>
</profile>
</profiles>
Теперь ребенок наследует от этого родительского POM по умолчанию будет использовать 2.0, как если бы ожидаем, и -Polder
или -Dolder.framework=true
будет работать над тем, чтобы попытаться создать его с помощью старой структуры (например, для проверки совместимости). Однако вы не можете писать ребенка POM
<properties>
<older.framework>true</older.framework>
</properties>
и имеют older
профиль активируется автоматически. Вы можете использовать активацию на основе файлов, чтобы этот модуль был построен против 1.1, если newest
не были активны по умолчанию, но тогда его непросто временно запустить против 2.0: насколько я знаю, профили older
и newest
будут активны, если вы прошло -Pnewest
, поэтому вам нужно явно указать disable другие профили, которые необоснованны, если у вас их дюжина. Так что нет просто никакого решения, кроме как скопировать информацию профиля на ребенка POM:
<properties>
<framework.version>1.1</framework.version>
<plugin.version>1.1</plugin.version>
</properties>
, при котором точка -Pnewest
будет не работа, чтобы переопределить эти свойства, так что вам нужно использовать -Dframework.version=2.0 -Dplugin.version=2.0
.
Другими словами, профили полезны, только если все дочерние модули могут использовать один и тот же профиль (здесь newest
) по умолчанию. Если некоторые из них обычно построены с 1.1, а некоторые с 2.0, профили бесполезны.
Похоже, что это прецедент для расширения ядра Maven или, возможно, расширение Maven 3. http://docs.codehaus.org/display/MAVEN/Custom+Profile+Activators и https://github.com/maoo/maven-tiles приходят на ум.
Yep. Я принимаю это, поскольку он основывается на моем ответе, и я вообще не люблю принимать свои собственные – Bostone
Очень полезная информация. И спасибо за отзыв о активации на основе файлов; что решило мою проблему очень чисто. – Allan