webentwicklung-frage-antwort-db.com.de

Plugins in Maven und POM.xml

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?

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>

Sie können Plugins auch in das <build> Abschnitt von <profile> wenn du maven profile verwendest. Die Reihenfolge spielt keine Rolle.

53
omnomnom

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:

  • Plugins unter 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 :

16
A_Di-Matteo

<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

5
yatul

Wenn Sie das Plugin zum Erstellen verwenden möchten, können Sie die folgende Struktur verwenden.

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

Sie können Ihr zweites Snippet an einer beliebigen Stelle in der Datei pom.xml zwischen zwei <plugins></plugins> - Tags einfügen.

2
alegen

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.

2