Ich bin ein Anfänger in Maven und bin jetzt verwirrt über den Unterschied zwischen den folgenden 3 Maven-Plugins:
maven-assembly-plugin
maven-jar-plugin
maven-shade-plugin
Erstellen all diese JAR-Dateien? Wenn ja, was ist der Unterschied zwischen den von ihnen erstellten Jar-Dateien? Was ist der Zweck jedes Plugins und in welchem Kontext sollte es verwendet werden?
maven-jar-plugin
: Dieses Plugin bietet die Möglichkeit, JARs zu erstellen und zu signieren. Aber es kompiliert nur die Java-Dateien unter src/main/java
Und src/main/resources/
. Es enthält nicht die Abhängigkeits-JAR-Dateien.
maven-assembly-plugin
: Dieses Plugin extrahiert alle Abhängigkeits-JARs in Rohklassen und gruppiert sie zusammen. Es kann auch verwendet werden, um ein ausführbares JAR zu erstellen, indem die Hauptklasse angegeben wird. Es funktioniert nur in Projekten mit weniger Abhängigkeiten; Bei großen Projekten mit vielen Abhängigkeiten führt dies zu Konflikten bei Java-Klassennamen.
maven-shade-plugin
: Es packt alle Abhängigkeiten in ein Uber-JAR. Es kann auch verwendet werden, um ein ausführbares JAR zu erstellen, indem die Hauptklasse angegeben wird. Dieses Plugin ist besonders nützlich, da es den Inhalt bestimmter Dateien zusammenführt, anstatt sie zu überschreiben Klassen verlegen. Dies ist erforderlich, wenn es Ressourcendateien gibt, die in allen JARs denselben Namen haben, und das Plug-in versucht, alle Ressourcendateien zusammen zu packen.
Verweisen: Vergleich: Maven-Plugin-Jar, Assembly, Schatten
Jar-Plugin
Mal sehen, was der folgende Befehl sagen kann.
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-jar-plugin
Es hat 3 Ziele, help
, jar
Und test-jar
. Ich glaube, Sie interessieren sich hauptsächlich für die jar
Goal, das laut Beschreibung folgendes bewirkt:
Erstellen Sie ein JAR aus dem aktuellen Projekt.
Als Randnotiz, Ausführung mvn help:effective-pom
bei einem Projekt mit Verpackungsset auf jar
zeigt, dass dieses Plugin automatisch konfiguriert und während der ausgeführt wird package
Phase.
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Assembly-Plugin
Dieser dient einem anderen Zweck. Es hat 8 Ziele, aber 6 davon sind veraltet. Also abgesehen von der help
Ziel, dies lässt uns mit dem single
Ziel.
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-assembly-plugin
Stellen Sie ein Anwendungspaket oder eine Verteilung aus einem Assemblydeskriptor zusammen. Dieses Ziel eignet sich entweder zum Binden an den Lebenszyklus oder zum Aufrufen direkt von der Befehlszeile aus (vorausgesetzt, alle erforderlichen Dateien sind verfügbar, bevor der Build beginnt, oder werden von einem anderen Ziel erzeugt, das vor diesem auf der Befehlszeile angegeben wurde).
Sie können das Assembly-Plugin verwenden, wenn Sie mehr als das Artefakt Ihres Projekts (JAR, WAR usw.) bereitstellen möchten, die Konfiguration jedoch in einer anderen Datei abgelegt wird.
Shade-Plugin
Die Beschreibung des Hauptziels ist etwas enttäuschend.
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-shade-plugin
Mojo, das die Schattierung durchführt und an die Shader-Komponente delegiert.
Sie möchten dieses Plugin hauptsächlich verwenden, wenn Sie ein Uber-JAR erstellen möchten, das Ihr Artefakt in einem JAR mit all seinen transitiven Abhängigkeiten darin ist.
Wenn Sie eine Bibliothek erstellen, bleiben Sie grundsätzlich beim Standard-JAR-Plugin. Wenn Sie eine Anwendung erstellen, können Sie das Shade-Plugin verwenden, obwohl es für mich irgendwie schnell und schmutzig ist. Wenn uber-jar nicht Ihr Geschmack ist oder die Distribution nicht in ein einzelnes JAR passt (externe Konfiguration, native Abhängigkeiten usw.), sollten Sie sich für das Assembly-Plugin entscheiden.
Das ist wirklich zu allgemein, um darauf zu antworten. Werfen Sie einen Blick auf die Dokumentation jedes Plugins, um zu sehen, was es tut. Es gibt auch Beispiele in den Dokumenten.
– Tunaki
24. Juli 2016 um 12:03 Uhr
IMHO, das ist eine gute Frage. Für einen Neuling (oder viele Experten) ist diese Wahl verwirrend. Und ja, reichten die Dokumente für alles / alles aus – SO war zunächst nicht erforderlich.
– Raúl
15. November 2016 um 12:46 Uhr