Erstellen einer ausführbaren JAR-Datei mit Abhängigkeiten mithilfe von Maven

Erstellen einer ausführbaren JAR-Datei mit Abhängigkeiten mithilfe von Maven
Erstellen einer ausführbaren JAR-Datei mit Abhängigkeiten mithilfe von Maven

Packen von Maven-Projekten in ein einziges ausführbares JAR

Bei der Arbeit mit Java-Projekten ist es häufig erforderlich, Ihre Anwendung zur einfachen Verteilung in eine einzige ausführbare JAR-Datei zu packen. Maven, ein leistungsstarkes Build-Automatisierungstool, ermöglicht es Entwicklern, alle erforderlichen Abhängigkeiten in dieses einzige Ausgabe-JAR einzubinden.

Dieser Artikel führt Sie durch die Schritte, die zum Konfigurieren Ihres Maven-Projekts erforderlich sind, um alle Abhängigkeits-JARs in Ihr endgültiges ausführbares JAR aufzunehmen. Wenn Sie diese Anweisungen befolgen, vereinfachen Sie den Bereitstellungsprozess und stellen sicher, dass Ihre Anwendung in verschiedenen Umgebungen reibungslos läuft.

Befehl Beschreibung
<plugin> Definiert ein Maven-Plugin, das während des Build-Prozesses verwendet werden soll. Plugins können bestimmte Aufgaben ausführen, z. B. das Kompilieren von Code oder das Packen des Projekts.
<groupId> Gibt die Gruppenkennung für das Maven-Projekt an, normalerweise einen umgekehrten Domänennamen.
<artifactId> Definiert den Bezeichner des Artefakts, also den Namen des Projekts.
<version> Gibt die aktuelle Version des Projekts an.
<build> Enthält die Build-Konfiguration für das Projekt, einschließlich Plugins und Ressourcen.
<descriptorRef> Verweist auf einen vordefinierten Deskriptor, den das Maven Assembly Plugin verwenden soll, z. B. „jar-with-dependencies“.
<mainClass> Gibt die Hauptklasse an, die ausgeführt werden soll, wenn die JAR-Datei ausgeführt wird.
<execution> Definiert einen Ausführungsblock innerhalb eines Plugins und gibt Aufgaben an, die in verschiedenen Build-Phasen ausgeführt werden sollen.
mvn clean package Befehl zum Bereinigen des Projekts und Packen in eine JAR-Datei, einschließlich aller Abhängigkeiten.
java -jar target/...jar Befehl zum Ausführen der generierten JAR-Datei unter Angabe des Pfads zur JAR.

Erstellen und Ausführen einer ausführbaren JAR-Datei mit Maven

Die oben bereitgestellten Skripte veranschaulichen, wie ein Maven-Projekt so konfiguriert wird, dass alle seine Abhängigkeiten in einer einzigen ausführbaren JAR-Datei zusammengefasst werden. Das erste Skript ist ein Maven pom.xml Datei, die die Konfiguration des Projekts enthält. In dieser Datei befindet sich die <plugin> Tag wird verwendet, um das Maven Assembly Plugin zu definieren. Dieses Plugin ist entscheidend für die Erstellung einer ausführbaren JAR-Datei, die alle Abhängigkeiten enthält. Der <descriptorRefs> -Tag innerhalb der Plugin-Konfiguration gibt die Verwendung des an jar-with-dependencies Deskriptor, der sicherstellt, dass alle Abhängigkeiten des Projekts in die endgültige JAR-Datei gepackt werden. Der <mainClass> Tag innerhalb der <manifest> Der Abschnitt ist wichtig, da er Maven mitteilt, welche Klasse die Hauptmethode enthält, die ausgeführt werden soll, wenn das JAR ausgeführt wird.

Der <execution> Der Block innerhalb der Plugin-Konfiguration ist der Ort, an dem die Aktion stattfindet. Es gibt das Ziel des Plugins an single sollte während des ausgeführt werden package Phase des Build-Lebenszyklus. Dies löst die Erstellung der JAR-Datei mit Abhängigkeiten aus. Das zweite Skript ist eine einfache Befehlszeilenanweisung: mvn clean package. Dieser Befehl bereinigt das Projekt (entfernt frühere Build-Artefakte), kompiliert den Quellcode, führt Tests aus und packt das Projekt in eine JAR-Datei. Die endgültige JAR-Datei befindet sich im target Verzeichnis des Projekts erstellt und entsprechend benannt artifactId Und version angegeben in der pom.xml.

Erstellen einer ausführbaren JAR-Datei mit Abhängigkeiten mithilfe von Maven

Maven-Konfigurationsskript

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Ausführen des Maven-Befehls zum Packen der JAR

Befehlszeilenanweisungen

mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar

# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included

Erweiterte Maven-Techniken für Verpackungsabhängigkeiten

Über die Grundkonfiguration zum Erstellen einer ausführbaren JAR-Datei mit Maven hinaus gibt es zusätzliche Techniken, die Ihren Build-Prozess verbessern können. Eine solche Technik beinhaltet die Verwendung von shade Plugin anstelle des assembly Plugin. Das Maven Shade Plugin bietet erweiterte Funktionen zum Erstellen von Uber-JARs (JARs mit enthaltenen Abhängigkeiten). Es ermöglicht Ihnen, Pakete umzubenennen, um Klassenpfadkonflikte zu vermeiden, und bietet eine bessere Handhabung doppelter Klassen und Ressourcen. Darüber hinaus bietet es eine detaillierte Kontrolle darüber, welche Abhängigkeiten im endgültigen JAR enthalten sind.

Ein weiterer wichtiger Aspekt ist die Verwaltung der Größe Ihrer JAR-Datei. Die Übertragung oder das Laden großer JAR-Dateien kann umständlich und langsam sein. Der maven-shade-plugin kann dabei helfen, indem es Ihnen ermöglicht, unnötige Dateien und Klassen auszuschließen und so die Größe des endgültigen JAR zu reduzieren. Sie können das Plugin auch so konfigurieren, dass die JAR-Datei minimiert wird, indem nicht wesentliche Informationen wie ungenutzte Klassen oder redundante Ressourcen entfernt werden. Diese erweiterten Konfigurationen können besonders nützlich sein, wenn Sie an großen Projekten mit zahlreichen Abhängigkeiten arbeiten.

Häufige Fragen und Lösungen für ausführbare Maven-JARs

  1. Wie spezifiziere ich die Hauptklasse in meiner JAR?
  2. Sie können die Hauptklasse mit angeben <mainClass> Tag innerhalb der <manifest> Abschnitt der Maven-Plugin-Konfiguration.
  3. Wie kann ich bestimmte Abhängigkeiten aus der endgültigen JAR-Datei ausschließen?
  4. Benutzen Sie die excludes Tag innerhalb der Plugin-Konfiguration, um Abhängigkeiten anzugeben, die nicht in die endgültige JAR-Datei aufgenommen werden sollen.
  5. Was ist ein Uber-JAR?
  6. Ein uber-JAR ist eine JAR-Datei, die nicht nur Ihren kompilierten Code, sondern auch alle seine Abhängigkeiten enthält.
  7. Wie kann ich Klassenpfadkonflikte in meiner JAR vermeiden?
  8. Der maven-shade-plugin ermöglicht es Ihnen, Pakete innerhalb von Abhängigkeiten umzubenennen, um Konflikte zu vermeiden.
  9. Wie gehe ich mit doppelten Klassen in Abhängigkeiten um?
  10. Konfigurieren Sie die maven-shade-plugin um doppelte Klassen und Ressourcen zu verwalten, indem angegeben wird, wie Duplikate im endgültigen JAR behandelt werden sollen.
  11. Kann ich nur bestimmte Dateien aus einer Abhängigkeit einschließen?
  12. Ja, Sie können das konfigurieren maven-assembly-plugin oder maven-shade-plugin um nur bestimmte Dateien aus einer Abhängigkeit einzuschließen.
  13. Wie führe ich das gepackte JAR aus?
  14. Benutzen Sie die java -jar Befehl gefolgt vom Pfad zu Ihrer JAR-Datei.
  15. Wie kann ich den Inhalt meiner JAR-Datei überprüfen?
  16. Du kannst den ... benutzen jar -tf Befehl zum Auflisten des Inhalts der JAR-Datei.
  17. Was passiert, wenn meine JAR-Datei zu groß ist?
  18. Benutzen Sie die maven-shade-plugin um unnötige Dateien auszuschließen und die JAR-Größe zu minimieren.

Abschließende Gedanken zu ausführbaren Maven-JARs

Das Erstellen einer ausführbaren JAR-Datei mit Abhängigkeiten mithilfe von Maven vereinfacht den Bereitstellungsprozess für Java-Anwendungen. Durch die richtige Konfiguration des pom.xml Durch die Verwendung von Plugins wie dem Maven Assembly Plugin oder dem Maven Shade Plugin können Entwickler alle erforderlichen Abhängigkeiten in einer einzigen JAR-Datei packen. Dieser Ansatz stellt sicher, dass die Anwendung nahtlos in verschiedenen Umgebungen ausgeführt werden kann, was die Verteilung und Ausführung vereinfacht. Wenn Sie diese Schritte befolgen, können Sie die Abhängigkeiten Ihres Projekts effektiv verwalten und zuverlässige, ausführbare JAR-Dateien erstellen.