Ich habe gerade angefangen, Maven zu verwenden und habe gelesen, dass Plugins zusätzliche Komponenten sind, die verwendet werden können.
Eine typische Struktur von pom.xml
Datei ist
<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>
Frage: Wo soll ich ein plugin
Tag einfügen? wie die folgenden:
<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>
Vor der Abhängigkeit oder nach dem Tag dependency
? Ist das wichtig?
<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>
Sie können Plugins auch in das <build>
Abschnitt von <profile>
wenn du maven profile verwendest. Die Reihenfolge spielt keine Rolle.
Eine späte Klarstellung zu zwei wichtigen Punkten
Wo soll plugin
platziert werden?
In den meisten Fällen sollte ein plugin
im Abschnitt build
/plugins
hinzugefügt werden, es gibt jedoch Ein wichtiger Unterschied zwischen dem Platzieren innerhalb von plugins
und dem Platzieren innerhalb von pluginManagement
/plugins
.
Dieses Missverständnis ist häufig die Ursache eines nicht aufgerufenen Plugins in Maven oder einer härteren Fehlerbehebung:
build
/plugins
sind direkt Teil des Standard-Maven-Builds, wenn sie ein execution
angeben oder etwas für den Standard-Build konfigurieren (siehe unten).Plugins unter build
/pluginManagement
/plugins
sind nicht unbedingt Teil des Standard-Maven-Builds, das heißt, es ist eine Verwaltung, es ist ein Hinweis, den Sie verwenden sollten Dieses Plugin verwenden Sie dann bitte die Version, die Konfiguration, die Ausführungen, die ich hier spezifiziere, in dieser Verwaltung.
Aber was bedeutet zufällig verwenden? Bedeutet: wenn das gleiche Plugin ist Wenden Sie auch im Abschnitt build
/plugins
diese Verwaltung an (und erst dann wird sie wirksam). oder Wenn das Plugin standardmäßig von Maven aufgerufen wird, wenden Sie es ebenfalls an.
Aber wie wird ein Plugin standardmäßig aufgerufen? Dies ist Teil der Hauptphilosophie hinter maven: Konvention über Konfiguration. Wenn Sie ein bestimmtes packaging
(voreingestelltes jar
) angeben, das jedoch beispielsweise war
sein kann, möchten Sie, dass bestimmte Plugins aufgerufen werden. Um ein jar
zu erstellen, standardmäßig rufe den maven-jar-plugin
Auf; Um ein war
zu erstellen, standardmäßig rufe den maven-war-plugin
auf und so weiter. Wenn Sie also eine Plugin-Konfiguration in build
/pluginManagement
/plugin
für ein Plugin angeben, das eine Standardbindung an den Maven-Build hat, wird diese ebenfalls verwendet .
Bestellung
Bezüglich der Reihenfolge der Abschnitte in der Datei pom.xml
ist eine weitere Erläuterung erforderlich: In den meisten Fällen ist dies in der Tat irrelevant In diesen Fällen kann jedoch die Reihenfolge des Elements plugin
im Abschnitt build
/plugins
wichtig sein. Seit Maven 3.0.3 ( MNG-2258
) sind verschiedene Plugin-Ausführungen mit derselben Maven-Phase verknüpft wird in der Reihenfolge ihrer Deklaration in der Datei pom.xml
aufgerufen. Das heißt, die Reihenfolge ist in diesem Fall wichtig , da dies das Verhalten des Builds beeinflussen kann.
Darüber hinaus kann auch die Reihenfolge der dependency
-Deklarationen Auswirkungen auf Ihre Erstellung in Richtung Abhängigkeitsvermittlung haben, dh, die erste deklarierte Abhängigkeit gewinnt im Falle eines Konflikts mit einer transitiven Abhängigkeit. Auch hier ist in bestimmten Fällen eine Reihenfolge wichtig .
Last but not least, obwohl die Bestellung für andere Abschnitte der pom.xml
- Datei nicht wichtig ist, ist es eine gute Angewohnheit, official Maven-Empfehlungen zu befolgen und als vereinfachte Version diese Reihenfolge der Deklaration einzuhalten :
<project>
<modelVersion/>
<parent/>
<groupId/>
<artifactId/>
<version/>
<packaging/>
<properties/>
<dependencyManagement/>
<dependencies/>
<build/>
<reporting/>
<profiles/>
</project>
Das sortpom-maven-plugin
kann auch verwendet werden, um diese Standardbestellung automatisch anzuwenden, indem einfach Folgendes in der betreffenden pom.xml
- Datei aufgerufen wird:
mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
-Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06
Zur weiteren Lektüre :
<plugin>
Sollte in den Abschnitt <plugins>
Gestellt werden, der in den Abschnitt <build>
Oder <pluginManagement>
Gestellt werden sollte. Die Reihenfolge der Abschnitte <dependency>
Oder <build>
Spielt keine Rolle.
Die vollständige Referenz zu pom.xml finden Sie hier: http://maven.Apache.org/pom.html
Wenn Sie das Plugin zum Erstellen verwenden möchten, können Sie die folgende Struktur verwenden.
<project>
<build>
<plugins>
</plugins>
</build>
</project>
Sie können Ihr zweites Snippet an einer beliebigen Stelle in der Datei pom.xml zwischen zwei <plugins>
</plugins>
- Tags einfügen.
Die Reihenfolge der Abschnitte in POM spielt keine Rolle. Generell gibt es in Maven Build-Plugins und Reporting-Plugins. Ihr Fall ist es, das Build-Plugin zu verwenden, also müssen Sie dieses <plugin>
Block in <project><build><plugins>...
Sektion.
Schauen Sie sich this für einige Grundlagen zu Plugins an.