Как переопределить привязку по умолчанию к фазе плагина Maven
Я хочу определить различные исполнения для плагинов в pluginManagement моего родительского pom, а затем привязать конкретные исполнения к фазам в дочерних pom. Я вижу противоречивое поведение в зависимости от используемого плагина и расположения раздела pluginManagement.
В этом первом примере pluginManagement расположен в родительском pom, определяя 2 выполнения для плагина компилятора и 2 выполнения для плагина antrun.
master-pom
4.0.0
plugin.test
master-pom
pom
1.0.0-SNAPSHOT
maven-compiler-plugin
execution-1
none
compile
1.6
1.6
**/*
execution-2
none
compile
1.5
1.5
**/*
org.apache.maven.plugins
maven-antrun-plugin
1.7
execution-1
run
execution-2
run
И ребенок пом
build
4.0.0
plugin.test
build
1.0.0-SNAPSHOT
pom
plugin.test
master-pom
1.0.0-SNAPSHOT
./master-pom.xml
maven-compiler-plugin
execution-1
generate-sources
org.apache.maven.plugins
maven-antrun-plugin
execution-1
generate-sources
Бег 'mvn clean install ' на дочернем pom будут запускаться оба исполнения плагина компилятора и только 1-е выполнение плагина antrun, хотя только 1-е выполнение каждого было привязано к фазе.
Теперь переместим плагин управления на дочерний пом:
build
4.0.0
plugin.test
build
1.0.0-SNAPSHOT
pom
maven-compiler-plugin
execution-1
none
compile
1.6
1.6
**/*
execution-2
none
compile
1.5
1.5
**/*
org.apache.maven.plugins
maven-antrun-plugin
1.7
execution-1
run
execution-2
run
maven-compiler-plugin
execution-1
generate-sources
org.apache.maven.plugins
maven-antrun-plugin
execution-1
generate-sources
Эта помпа дает желаемое поведение, которое запускает только 1-е выполнение для каждого плагина. Плагин компилятора (и большинство других) работает корректно только в том случае, когда pluginManagement расположен в одном и том же модуле, и каждое выполнение связано с phase = none (возможно, потому что оно связывает выполнение с фазой по умолчанию). Плагин antrun работает корректно в любом случае.
Как я могу этого добиться, имея раздел pluginManagement в родительском pom и не привязывая специально нежелательные исполнения к phase = none в дочерних pom? Это ошибка в Maven или это поведение как-то оправдано? Я пробовал это на Maven 3.0.4 и Maven 2.2.1 с теми же результатами.