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?
<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.
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:
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 :
<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
Si vous souhaitez utiliser le plugin pour la construction, vous pouvez utiliser la structure ci-dessous.
<project>
<build>
<plugins>
</plugins>
</build>
</project>
Vous pouvez insérer votre deuxième extrait n'importe où dans le fichier pom.xml entre deux <plugins>
</plugins>
Mots clés.
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.