Подтвердить что ты не робот

Можно ли настроить несколько плагинов в pluginManagement и выбрать из них в моем дочернем POM?

У меня есть две общие задачи, связанные с плагинами, которые я хочу выполнить в своих проектах. Поскольку они распространены, я хочу переместить их конфигурацию в раздел pluginMangement общего родительского ПОМ. Тем не менее, обе из двух задач, в то время как в противном случае полностью различны, используют один и тот же плагин. В некоторых моих проектах я хочу только сделать одну из двух задач (я не всегда хочу запускать все исполнения плагина).

Есть ли способ указать несколько разных исполнений плагина в разделе pluginManagement родительского pom и выбрать в моем дочернем pom один (и только один) из этих исполнений для фактического запуска? Если я сконфигурировал 2 исполнения в pluginManagement, кажется, что оба исполнения будут выполняться.

Примечание. Я думаю, что это может быть или не быть дубликатом вопроса Maven2 - проблема с отношениями pluginManagement и parent-child, но поскольку вопрос почти 4 длинных экрана (TL; DR), может быть полезным краткий дубликат.

4b9b3361

Ответ 1

Вы правы, по умолчанию 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>

Если дочерний элемент явно не привязывает выполнение к фазе, он не будет работать. Это позволяет вам выбирать желаемые исполнения.