Puis-je configurer plusieurs exécutions de plug-in dans pluginManagement, et choisir parmi eux dans mon POM enfant?

J'ai 2 tâches communes pilotées par des plugins que je veux exécuter dans mes projets. Parce qu'ils sont communs, je veux déplacer leur configuration vers la section pluginMangement d'un POM parent partagé. Cependant, les deux tâches 2, bien que complètement distinctes, utilisent le même plugin. Dans certains de mes projets, je veux seulement faire 1 des 2 tâches (Je ne veux pas toujours exécuter toutes les exécutions du plugin).

Existe-t-il un moyen de spécifier plusieurs exécutions différentes d'un plugin, dans la section pluginManagement d'un parent pom, et choisissez dans mon enfant pom une (et une seule) de ces exécutions à exécuter réellement? Si je configure 2 exécutions dans pluginManagement, Il semble que les deux exécutions s'exécuteront.

Note: je pense que cela peut, ou non, être un duplicata de question Maven2-problème avec pluginManagement et relation parent-enfant , mais comme la question est presque 4 screenfuls long (TL;DR), un duplicata succinct pourrait en valoir la peine.

27
demandé sur Community 2013-05-14 14:29:08

1 réponses

Vous avez raison, par défaut Maven inclura toutes les exécutions que vous avez configurées. Voici comment j'ai traité cette situation avant.

<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>

Notez que les exécutions sont liées à la phase none. Dans l'enfant, vous activez les parties qui doivent s'exécuter comme ceci:

<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>

Si l'enfant ne lie pas explicitement l'exécution à une phase, il ne s'exécutera pas. Cela vous permet de choisir les exécutions désiré.

38
répondu user944849 2013-05-14 13:35:57