Verwenden Sie „maven-shade-plugin“, um nur 1 ausführbares JAR mit allen erforderlichen Abhängigkeiten für Ihr Java- oder Spring-Projekt zu erstellen?

Veröffentlicht: 2016-11-16

maven-shade-plugin-how-to-create-javaspring-based-executable-jar-with-all-required-dependencies

Erstellen Sie einfach eine Crunchify.jar -Datei mit allen darin enthaltenen Abhängigkeiten

Letzte Woche habe ich ein Tutorial zur Verwendung von maven-resources-plugin , maven-dependency-plugin & maven-jar-plugin , um Ihr vollständiges ausführbares Jar-Projekt zu generieren. Als Ergebnis erstellt / kopiert es alle erforderlichen Dateien in den Ordner /target/Crunchify .

Before: Verwendung von maven-resource-, maven-dependency-, maven-jar-Plugins:

maven-resources-maven-dependency-maven-jar-plugin-to-build-java-project

Nachher After: ​​Verwendung des Maven-Shade-Plugins:

erstelle-nur-1-ausführbare-jar-datei-mit-allen-erforderlichen-abhängigkeiten-eigenschaften-und-ressourcen-datei-darin-für-dein-java-oder-spring-projekt

Beginnen wir damit, wie Sie das obige Ergebnis erzielen:

Wie Sie sehen, haben wir hier alles von Java Project in just one file gebündelt und den Namen Crunchify.jar (mit allen darin enthaltenen Dateien) gegeben.

Vor ein paar Tagen hatte ich keine Ahnung, wie ich das erreichen sollte, da ich mit Maven runnable binary distribution of a standalone Java application erstellen wollte. Mit anderen Worten:

  1. Wie erstelle ich ein springbasiertes ausführbares JAR mit Maven?
  2. Erstellen einer lauffähigen Binärdistribution mit Maven für Java + Spring + andere Abhängigkeiten
  3. Wie erstellt man Java + Spring-Projekte mit Maven?

Normalerweise verlassen wir uns in Maven auf das Abhängigkeitsmanagement. Ein Artefakt enthält nur die Klassen/Ressourcen seiner selbst. Maven ist dafür verantwortlich, alle Artefakte (JARs usw.) herauszufinden, von denen das Projekt abhängig ist, wenn es kompiliert und ausgeführt wird usw.

Mit Hilfe von maven -shade- plugin konnte ich dieses Ziel erreichen . Es bietet die Möglichkeit, das Artefakt in ein uber-jar (One major file jar) zu packen, einschließlich seiner Abhängigkeiten, und die Pakete einiger der Abhängigkeiten zu schattieren – dh umzubenennen.

In meinem Projekt habe ich so viele andere Abhängigkeiten, dh Spring Framework, JSON, Tools von Drittanbietern usw. Unten ist nur ein Beispielprojekt, aber meine Produktions-JAR-Datei war ~5.2MB big .

Ein uber-jar ist etwas, das alle Abhängigkeiten nimmt und den Inhalt der Abhängigkeiten extrahiert und in das eine JAR mit den Klassen/Ressourcen des Projekts selbst legt. Durch ein solches Uber-JAR ist easy for execution , da Sie nur ein großes JAR anstelle von Tonnen kleiner JARs benötigen, um Ihre App auszuführen. Es erleichtert in einigen Fällen auch die Verteilung.

Um dies zu erreichen, müssen Sie Ihre pom.xml-Datei aktualisieren.

Schritt 1

Sehen Sie sich die vollständige pom.xml -Datei an. Sie wären hauptsächlich am Tag <build> interessiert.

Wie Sie hier sehen können, verwende ich Resource Transformers in der Datei pom.xml. Das Zusammenfassen von classes/resources aus mehreren Artefakten in einem Crunchify JAR ist einfach, solange es keine Überschneidungen gibt. Andernfalls ist eine Art Logik zum Zusammenführen von Ressourcen aus mehreren JARs erforderlich. Hier setzen Ressourcentransformatoren an.

Schritt 2

Sobald Sie maven-shade-plugin zu Ihrer pom.xml -Datei hinzugefügt haben, verwenden Sie einfach den folgenden Befehl, um Ihr Projekt zu erstellen.

Und Sie sollten eine Crunchify.jar -Datei (uber-jar) sehen, die mit all dependencies mentioned in pom.xml file erstellt wurde.

Schritt 3

Gehen Sie zum Zielordner Ihres Projekts und Sie sehen die erstellte Crunchify.jar-Datei. Verwenden Sie einfach den Befehl

$bash> java -jar Crunchify.jar , um Ihr Projekt auszuführen.

Haben Sie etwas hinzuzufügen? Fügen Sie es dem Kommentarbereich unten hinzu. Viel Spaß, einen schönen Tag und viel Spaß beim Programmieren.