web-dev-qa-db-fra.com

Plugins dans Maven et POM.xml

Je viens de commencer à utiliser Maven et j'ai lu que les plugins sont des composants supplémentaires qui peuvent être utilisés.
Une structure typique de pom.xml le fichier est

<project>
  <groupId>org.koshik.javabrains</groupId>
  <artifactId>JarName</artifactId> (A fldernamed JarName was created) 
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>JarName</name>
  <url>http://maven.Apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Question: Où dois-je insérer une balise plugin? tels que les suivants:

<plugin>
  <groupId>org.jibx</groupId>
  <artifactId>jibx-maven-plugin</artifactId>
  <version>1.2.4</version>
  <executions>
    <execution>
      <goals>
        <goal>bind</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Avant la dépendance ou après la balise dependency? Est-ce que ça importe?

52
Rajeshwar
<project>
    <groupId>org.koshik.javabrains</groupId>
    <artifactId>JarName</artifactId> (A fldernamed JarName was created) 
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>JarName</name>
    <url>http://maven.Apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jibx</groupId>
                <artifactId>jibx-maven-plugin</artifactId>
                <version>1.2.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>bind</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Vous pouvez également placer des plugins dans le <build> section de <profile> si vous utilisez des profils maven. L'ordre n'a pas d'importance.

53
omnomnom

Une clarification tardive sur deux points importants

Où placer plugin
Un plugin doit en effet être ajouté dans la plupart des cas dans la section build/plugins, mais il y a une différence importante entre le placer dans plugins et le placer dans pluginManagement/plugins.

Ce malentendu est souvent la cause d'un plugin non invoqué dans Maven ou d'un dépannage plus difficile:

  • Les plugins sous build/plugins font directement partie de la build Maven par défaut, s'ils spécifient un execution ou s'ils configurent quelque chose pour la build par défaut (voir ci-dessous)
  • Les plugins sous build/pluginManagement/plugins ne font pas nécessairement partie de la construction par défaut de Maven, c'est-à-dire, est une gestion, c'est un conseil pour maven: il vous arrive d'utiliser ce plugin, alors merci d'utiliser la version, la configuration, les exécutions que je précise ici, dans cette gestion.

    Mais que signifie arrive à utiliser signifie? Signifie: si le même plugin est également présent dans la section build/plugins, puis appliquez cette gestion (et alors seulement elle sera effective); ou si le plugin est invoqué par défaut par Maven, alors appliquez-le également.

    Mais comment un plugin est-il appelé par défaut? Cela fait partie de la philosophie principale de maven: la convention sur la configuration. Par convention, lorsque vous spécifiez un certain packaging (par défaut jar, mais il peut être war par exemple), vous souhaitez que certains plugins soient invoqués. Pour construire un jar, par défaut appelez le maven-jar-plugin; pour construire un war, par défaut invoquez le maven-war-plugin etc. Donc, si vous spécifiez une configuration de plugin dans le build/pluginManagement/plugin pour un plugin qui a une liaison par défaut à la construction Maven, alors il sera également utilisé .

Commande
Concernant la commande des sections dans le pom.xml fichier, une clarification supplémentaire est requise: elle est en effet hors de propos dans la plupart des cas, cependant l'ordre de l'élément plugin dans le build/plugins section peut être importante. Depuis Maven 3.0.3 ( MNG-2258 ), différentes exécutions de plugin attachées à la même phase Maven seront invoquées dans leur ordre de déclaration dans le pom.xml fichier. Autrement dit, l'ordre est important dans ce cas, car il peut affecter le comportement de la génération.

De plus, l'ordre des déclarations dependency peut également affecter votre génération vers Dependency Mediation , c'est-à-dire que la première dépendance déclarée l'emporte en cas de conflit avec une dépendance transitive. Donc, encore une fois, l'ordre est important dans certains cas .

Last but not least, bien que la commande ne soit pas importante pour les autres sections du pom.xml fichier, la bonne habitude est de suivre officiellement recommandations Maven et, en version simplifiée, de suivre cet ordre de déclaration:

<project>
  <modelVersion/>

  <parent/>

  <groupId/>
  <artifactId/>
  <version/>
  <packaging/>

  <properties/>

  <dependencyManagement/>
  <dependencies/>

  <build/>

  <reporting/>

  <profiles/>
</project>

Le sortpom-maven-plugin peut également être utilisé pour appliquer automatiquement cette commande standard, en appelant simplement ce qui suit sur le pom.xml fichier:

mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
     -Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06 

Pour plus d'informations :

16
A_Di-Matteo

<plugin>doit être placé dans <plugins> section qui doit être placée dans <build> ou <pluginManagement> section. L'ordre de <dependency> ou <build> la section n'a pas d'importance.

La référence complète sur pom.xml est ici: http://maven.Apache.org/pom.html

5
yatul

Si vous souhaitez utiliser le plugin pour la construction, vous pouvez utiliser la structure ci-dessous.

<project>
 <build>
  <plugins>
  </plugins>
 </build>
</project>
4
Subir Kumar Sao

Vous pouvez insérer votre deuxième extrait n'importe où dans le fichier pom.xml entre deux <plugins></plugins> Mots clés.

2
alegen

L'ordre des sections dans POM n'a pas d'importance. En général, il existe des plugins de génération et des plugins de rapport dans Maven. Votre cas est d'utiliser un plugin de construction, vous devez donc mettre ce <plugin> bloquer dans <project><build><plugins>... section.

Regardez this pour quelques notions de base sur les plugins.

2