Unterschied zwischen dem Maven-Assembly-Plugin, Maven-Jar-Plugin und Maven-Shade-Plugin?

Lesezeit: 4 Minuten

Benutzeravatar von ilovejavaAJ
ilovejavaAJ

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?

  • 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

Benutzeravatar von secfree
sekundenfrei

  1. 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.
  2. 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.
  3. 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

  • large project with many dependencies, it will cause Java class name conflict issue. Wie geht man dann mit diesen Fällen um?

    – Michel Feinstein

    16. Dezember 2018 um 14:27 Uhr

  • @mFeinstein in diesem Fall müssen Sie maven-shade-plugin verwenden, weitere Details finden Sie im bereits eingefügten Link für “Klassen verschieben” oben

    – Gamaschen

    26. Dezember 2018 um 9:33 Uhr

  • Ich habe immer noch Probleme, den Unterschied zwischen Assembly und Shade zu erkennen, da beide die Herstellung eines Uber-Jars mit allen Abhängigkeiten zu ermöglichen scheinen. Gehe ich richtig in der Annahme, dass Assembly alles blind in einem einzigen Glas zusammenstellt, was zu Konflikten zwischen verschiedenen Versionen derselben Datei führen kann, und dieser Schatten gibt Ihnen mehr Kontrolle, um diese Art von Konflikten zu lösen? Danke.

    – Alain Désilets

    24. Juni 2022 um 11:48 Uhr

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 jarzeigt, 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.

1449960cookie-checkUnterschied zwischen dem Maven-Assembly-Plugin, Maven-Jar-Plugin und Maven-Shade-Plugin?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy