Maven2 - problème avec pluginManagement et relation parent-enfant

de maven la documentation

pluginManagement: est un élément qui est vu à côté de plugins. Gestion des plugins plugin contient des éléments de la même façon, sauf que plutôt que de la configuration du plugin d'information pour ce projet particulier de construction, il est prévu pour la configuration de projet se construit qui héritent de celle-ci. Toutefois, cela ne configure les plugins qui sont référencées dans les plugins élément dans les enfants. Les enfants ont tout à fait le droit de remplacer pluginManagement définitions.

Maintenant : si j'ai cela dans mes parent POM

  <build>
   <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
          <executions>
             Some stuff for the children
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

et je exécuter mvn help:effective-pom sur le projet parent j'obtiens ce que je veux, à savoir les plugins directement en vertu de construire (celui qui fait le travail) reste vide.

Maintenant, si je ne les suivants :

  <build>
   <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
          <executions>
             Some stuff for the children
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <inherited>true</inherited>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
</plugins>
  </build>

mvn help:effective-pom-je obtenir exactement ce que je veux, les plugins contient tout ce qui est déclaré et la pluginManagement section est ignorée.

MAIS en changeant les suivantes

  <build>
   <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
          <executions>
             Some stuff for the children
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
          <inherited>false</inherited> <!-- this perticular config is NOT for kids... for parent only -->
            <executions>
             some stuff for adults only
            </execution>
          </executions>
       </plugin>
    </plugins>
  </build>

et d'exécuter mvn help:effective-pom
les trucs de pluginManagement l'article est ajouté au-dessus de ce qui est déclaré déjà. en tant que tel :

  <build>
   <pluginManagement>
     ...
   </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
          <inherited>false</inherited> <!-- this perticular config is NOT for kids... for parent only -->
              <executions>
                 Some stuff for the children
                </execution>
            <executions>
             some stuff for adults only
            </execution>
          </executions>
       </plugin>
    </plugins>
  </build>

Est-il un moyen d'exclure la partie pour les enfants à partir du pom parent de l'article ? En effet, ce que je veux c'est pour la pluginManagement à se comporter exactement comme les états de documentation, c'est que je veux qu'il s'applique pour les enfants seulement, mais pas pour le projet dans lequel elle est déclarée.

Comme un corrolary, est-il une manière que je peux remplacer les pièces de la pluginManagement en déclarant le plugin dans la normale construire la section d'un projet ? quoi que j'essaye je reçois ce que la section est ajoutée à des exécutions, mais je ne peut pas remplacer celui qui existe déjà.

EDIT:

Je n'ai jamais fait de trouver une solution acceptable pour cela, et en tant que telle, la question reste ouverte. Plus proche de la solution a été offert ci-dessous et est actuellement la solution retenue pour cette question jusqu'à ce que quelque chose de mieux. Actuellement, il existe trois façons d'obtenir le résultat souhaité (moduler plugin comportement selon l'endroit où dans la hiérarchie d'héritage de l'actuel POM est):

1 - à l'aide de profils, cela va fonctionner, mais vous devez être prudent que les profils ne sont pas héritées, qui est un peu contre-intuitif. Ils sont (si activé) appliquée à la POM où déclarées et puis cela a généré POM est propagée vers le bas. En tant que tel la seule façon d'activer le profil pour enfant POM est précisément sur la ligne de commande (du moins je n'ai pas trouvé d'autre moyen). De la propriété, de fichiers et d'autres moyens d'activation ne parviennent pas à activer le POM parce que le déclencheur n'est pas dans le POM où le profil est déclarée.

2 - (c'est ce que j'ai fait) Déclarer le plugin ne pas hérité de la mère et de re-déclarer (copier-coller) la friandise à chaque enfant là où il voulait. Pas l'idéal, mais c'est simple et ça fonctionne.

3 - Split l'agrégation de la nature et de la mère nature de la POM parent. Ensuite, étant donné que la partie qui s'applique uniquement à la mère est dans un autre projet, il est maintenant possible d'utiliser pluginManagement que tout d'abord prévu. Cependant, cela signifie qu'une nouvelle artificiel projet doit être créé qui ne contribuent pas à la fin un produit, mais qui ne sert pouvait système. C'est bien le cas de conceptuel saigner. Aussi cela ne s'applique qu'à mon spécifiques et il est difficile de généraliser, j'ai donc abandonné les efforts pour essayer de le faire travailler en faveur de la non-jolie, mais plus contenue couper et coller correctif décrit dans la section 2.

Si quelqu'un à venir à travers cette question a une meilleure solution, soit en raison de mon manque de connaissance de Maven ou parce que l'outil a évolué pour permettre à cette s'il vous plaît poster la solution ici pour référence future.

Merci à vous tous pour votre aide 🙂

source d'informationauteur Newtopian | 2009-08-12