我有两个常见的插件驱动的任务,我想在我的项目中执行。因为它们很常见,所以我想将它们的配置移到共享父POM的pluginMangement
部分。但是,两个任务虽然完全不同,但使用相同的插件。在我的一些项目中,我只想做两个任务中的一个(我并不总是希望运行插件的所有执行)。
有没有办法在父pom的pluginManagement
部分中指定插件的多个不同执行,并在我的孩子pom中选择一个(并且只有一个)实际运行的执行?如果我在pluginManagement
中配置了两次执行,那么两个执行似乎都会运行。
注意:我认为这可能是,也可能不是问题Maven2 - problem with pluginManagement and parent-child relationship的重复,但由于问题是将近4个屏幕(TL; DR),因此简洁的重复可能是值得的。
答案 0 :(得分:43)
你是对的,默认情况下Maven会包含你配置的所有执行。以下是我之前处理过这种情况的方法。
<pluginManagement>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>some-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>first-execution</id>
<phase>none</phase>
<goals>
<goal>some-goal</goal>
</goals>
<configuration>
<!-- plugin config to share -->
</configuration>
</execution>
<execution>
<id>second-execution</id>
<phase>none</phase>
<goals>
<goal>other-goal</goal>
</goals>
<configuration>
<!-- plugin config to share -->
</configuration>
</execution>
</executions>
</plugin>
</pluginManagement>
请注意,执行绑定到阶段none
。在子项中,您启用应执行的部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>some-maven-plugin</artifactId>
<executions>
<execution>
<id>first-execution</id> <!-- be sure to use ID from parent -->
<phase>prepare-package</phase> <!-- whatever phase is desired -->
</execution>
<!-- enable other executions here - or don't -->
</executions>
</plugin>
如果子进程未将执行显式绑定到某个阶段,则它将无法运行。这允许您选择所需的执行。