40

我想在我的项目中执行 2 个常见的插件驱动任务。因为它们很常见,所以我想将它们的配置移动到pluginMangement共享父 POM 的部分。但是,这两个任务虽然在其他方面完全不同,但都使用相同的插件。在我的一些项目中,我只想执行 2 个任务中的 1 个(我并不总是想运行插件的所有执行)。

有没有办法在pluginManagement父 pom 的部分中指定插件的多个不同执行,并在我的子 pom 中选择其中一个(并且只有一个)实际运行?如果我在 中配置 2 个执行pluginManagement,似乎两个执行都会运行。

注意:我认为这可能是问题的重复,也可能不是问题Maven2 - pluginManagement and parent-child relationship的问题,但由于问题的长度接近 4 个屏幕(TL;DR),所以一个简洁的重复可能是值得的。

4

1 回答 1

63

你是对的,默认情况下 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>

请注意,执行绑定到 phase 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>

如果子进程没有显式地将执行绑定到某个阶段,它将不会运行。这允许您挑选和选择所需的执行。

于 2013-05-14T13:35:57.737 回答