Если вы хотите иметь профиль, который должен применяться к подмодулям (и только к некоторым из них), определенный централизованно в их родительском проекте (pom) и при этом не применять профиль к самому родителю, вот предлагаемый подход:
Определите профиль в родительском pom, образец один:
<profiles>
<profile>
<id>sample-profile</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>print-hello</id>
<phase>${phase.prop}</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="hello there!" />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Обратите внимание, что мы делаем:
- элемент плагина
phase параметризован, поэтому привязка плагина к фазе сборки также будет параметризована
- Теперь мы можем решить через свойство, к какой фазе прикрепить выполнение этого плагина.
- Теперь мы можем решить с помощью свойства, чтобы привязать выполнение этого плагина к какой-либо фазе (или к пустой фазе).
Итак, в том же родительском pom определим свойство:
<properties>
<phase.prop>none</phase.prop>
</properties>
Таким образом, сборка, работающая на родительском pom, не будет привязывать выполнение плагина ни к какой фазе (none не является ключевым словом или известным значением, просто стандартом де-факто, используемым для несуществующей фазы, вы можете оставить его пустым или поместить его любое значение, которое вы хотите, оно будет иметь тот же эффект) и, следовательно, пропустите его. Он также будет пропущен по умолчанию во всех заявленных модулях. Профиль по-прежнему будет активен в каждом модуле, но будет безвреден, поскольку по умолчанию не запускает никаких плагинов.
Затем в модулях, где вы хотите, чтобы выполнение плагина было активным, вы можете переопределить только соответствующее свойство и требуемую фазу:
<properties>
<phase.prop>package</phase.prop>
</properties>
При последующей активации профиля из основной сборки (родительской)
mvn clean install -Psample-profile
Родитель применит его ко всем модулям, но эффективное выполнение профиля произойдет только там, где значение phase.prop имеет значение, имеющее значение maven.
Если вам нужно иметь разные фазы для разных исполнений плагинов, вы можете определить более одного свойства и применить один и тот же шаблон.
Если у вас нет выполнения плагина, а есть глобальная конфигурация плагина для плагина, уже запущенного Maven (как часть его упаковки и сборки по умолчанию), вы можете переопределить его выполнение, переопределив идентификатор выполнения по умолчанию.
Обратите внимание, что мы могли бы сделать то же самое, используя элемент конфигурации skip, но:
- не все плагины предоставляют запись конфигурации
skip
- использование элемента
phase не связано с какой-либо конфигурацией и может быть повторно использовано для выполнения, привязанного к той же фазе
person
A_Di-Matteo
schedule
16.02.2016