Bearbeiten von JARs, WARs und EARs in der Befehlszeile
Erfahren Sie über die Befehlszeile, wie Sie grundlegende CRUD-Operationen für JAR-, WAR- und EAR-Dateien ausführen.
Obwohl Java-IDEs und zahlreiche grafische Tools das Anzeigen und Bearbeiten des Inhalts von Java-Archivdateien (JAR, WAR und EAR) einfacher als je zuvor machen, bevorzuge ich manchmal die Verwendung des Befehlszeilenbefehls jar, um diese Aufgaben auszuführen. Dies gilt insbesondere dann, wenn ich etwas wiederholt tun muss oder wenn ich es als Teil eines Skripts mache. In diesem Beitrag beschäftige ich mich mit der Verwendung des Befehls jar zum Erstellen, Anzeigen und Bearbeiten von Java-Archivdateien.
JAR-Dateien werden hauptsächlich in diesem Beitrag verwendet, aber die Befehle, die ich für .jar
Dateien demonstriere , funktionieren konsistent mit .war
und .ear
Dateien. Beachten Sie auch, dass das JAR-Format auf dem ZIP-Format basiert und die zahlreichen verfügbaren Tools für die Arbeit mit ZIP-Dateien auf JAR-, WAR- und EAR-Dateien angewendet werden können. Es ist auch zu beachten, dass die jar
Optionen dazu neigen , die Optionen zu spiegeln tar
.
Für meine Beispiele möchte ich einige .class
Dateien zusammenstellen. Der nächste Screenshot zeigt, wie einige Java-Quellcodedateien ( .java
Dateien) zu .class
Dateien kompiliert werden. Die tatsächliche Quelle dieser Dateien ist für diese Diskussion unbedeutend und wird hier nicht angezeigt. Ich habe gezeigt, dass das Kompilieren ohne IDE mit der Verwendung von Befehlszeilentools in diesem Beitrag übereinstimmt.
Vorbereiten der Dateien, die in den JAR-Beispielen verwendet werden sollen

Der nächste Screenshot zeigt, dass meine .class
Dateien kompiliert wurden und bereit sind, in eine JAR aufgenommen zu werden.

Erstellen einer JAR-Datei
Die c
Option " " für den jar
Befehl weist ihn an, ein Archiv zu erstellen. Ich verwende gerne die Optionen " v
" (ausführlich) und " f
" (Dateiname) für alle jar
Befehle, die ich ausführe, damit die Ausgabe ausführlich ist (um zu sehen, dass etwas passiert und dass es das Richtige ist) Der zutreffende JAR / WAR / EAR-Dateiname kann je nach Standardeingabe und Standardausgabe als Teil des Befehls anstelle der Eingabe oder Ausgabe angegeben werden. Beim Erstellen einer JAR-Datei erstellen die Optionen "cvf" eine JAR-Datei ( c
) mit dem angegebenen Namen ( f
) und drucken die ausführliche Ausgabe ( v
) für diese Erstellung aus.
Der nächste Screenshot zeigt die einfachste Verwendung von jar cvf
. Ich habe mein aktuelles Verzeichnis in das Verzeichnis "classes" geändert, sodass das Erstellen der JAR so einfach wie das Ausführen von jar cvf *
oder ist jar cvf .
und alle Dateien im aktuellen Verzeichnis sowie alle Unterverzeichnisse und Dateien in Unterverzeichnissen in der erstellten JAR-Datei enthalten sind. Dieser Vorgang wird im nächsten Screenshot demonstriert.

Wenn ich mein aktuelles Verzeichnis nicht explizit in das am besten geeignete Verzeichnis ändern möchte, aus dem die JAR vor dem Ausführen erstellt werden soll jar
, kann ich die -C
Option verwenden, jar
um dies im Rahmen des Erstellungsprozesses implizit anzuweisen . Dies wird im nächsten Screenshot gezeigt.

Auflisten des Archivinhalts
Das Auflisten (oder Anzeigen) des Inhalts einer JAR-, WAR- oder EAR-Datei ist wahrscheinlich die Funktion, die ich mit dem jar
Befehl am häufigsten ausführe . Normalerweise verwende ich dafür die Optionen " t
" (Listeninhalt des Archivs), " v
" (ausführlich) und " f
" (Dateiname in der Befehlszeile angegeben). Der nächste Screenshot zeigt, jar tvf MyClasses.jar
wie der Inhalt meiner generierten JAR-Datei angezeigt wird .

Extrahieren des Inhalts der Archivdatei
Manchmal ist es wünschenswert, eine oder mehrere der in einer Archivdatei enthaltenen Dateien zu extrahieren, um den Inhalt dieser einzelnen Dateien zu bearbeiten oder anzuzeigen. Dies erfolgt mit der Option jar
" x
" (zum Extrahieren). Der nächste Screenshot zeigt, jar xvf MyClasses.jar
wie der gesamte Inhalt dieser JAR-Datei extrahiert wird. Beachten Sie, dass die ursprüngliche JAR-Datei intakt bleibt, der Inhalt jedoch jetzt auch direkt verfügbar ist.

Ich muss oft nur eine oder zwei Dateien der Archivdatei anzeigen oder damit arbeiten. Obwohl ich definitiv alle wie im letzten Beispiel gezeigt extrahieren und nur die bearbeiten konnte, die ich bearbeiten muss, ziehe ich es vor, nur die Dateien zu extrahieren, die ich benötige, wenn die Anzahl gering ist. Dies ist einfach mit demselben jar xvf
Befehl möglich. Durch Angabe der vollständig qualifizierten Dateien, die explizit nach dem Namen der Archivdatei im Befehl extrahiert werden sollen, kann ich anweisen, nur diese spezifischen Dateien zu extrahieren. Dies ist vorteilhaft, da ich mein Verzeichnis nicht mit Dateien fülle, die mir egal sind, und ich mich nicht mehr um das Aufräumen kümmern muss, wenn ich fertig bin. Der nächste Screenshot zeigt, wie ausgeführt wird jar xvf MyClasses.jar dustin/examples/jar/GrandParent.class
, um nur diese einzelne Klassendefinition für GrandParent zu extrahieren, anstatt alle Dateien in dieser JAR zu extrahieren.

Aktualisieren einer Archivdatei
Frühere Beispiele haben gezeigt, wie der jar
Befehl mit "c" zum Erstellen eines Archivs, mit "t" zum Auflisten des Archivinhalts und mit "x" zum Extrahieren des Archivinhalts versehen wird. Eine weitere häufig ausgeführte Funktion ist das Aktualisieren des Inhalts eines vorhandenen Archivs. Dies wird mit jar
der u
Option " " erreicht. Der nächste Screenshot zeigt, wie Sie eine Textdatei (unter DOS mit dem Befehl copy con) erstellen, die aufgerufen wird, tempfile.txt
und anschließend die JAR jar uvf MyClasses.jar tempfile.txt
aktualisieren MyClasses.jar
und tempfile.txt
zu dieser JAR hinzufügen .
Wenn ich eine Datei in einem vorhandenen Archiv aktualisieren möchte, kann ich diese Datei mit extrahieren, jar xvf
die Datei wie gewünscht ändern und t mit dem jar uvf
Befehl wieder in die ursprüngliche JAR einfügen. Die neue Datei überschreibt die bereits vorhandene Datei mit demselben Namen. Dies wird im nächsten Screenshot simuliert.

Löschen eines Eintrags aus der Archivdatei
Es ist vielleicht ein wenig überraschend, dass beim Lesen der Jar-Manpage, der Oracle-Tools-Beschreibung von jar oder der Java-Tutorials zu jar keine Option zum Löschen von Einträgen aus einer Java-Archivdatei angezeigt wird. Eine Möglichkeit, dies zu erreichen, besteht darin, den Inhalt einer JAR zu extrahieren, die nicht mehr gewünschten Dateien zu entfernen und die JAR aus den Verzeichnissen neu zu erstellen, wobei diese Dateien entfernt werden. Ein viel einfacherer Ansatz besteht jedoch darin, die auf ZIP basierende Java-Archivierung einfach zu nutzen und die Löschfunktionen der ZIP-basierten Tools zu verwenden.
Der nächste Bildschirm - Schnappschuss zeigt 7-Zip verwenden (unter Windows) zu löschen tempfile.txt
aus , MyClasses.jar
indem Sie den Befehl ausführen 7z d MyClasses.jar tempfile.txt
. Beachten Sie, dass das Gleiche unter Linux mit erreicht werden kann zip -d MyClasses.jar tempfile.txt
. Andere ZIP-unterstützende Tools haben ihre eigenen Optionen.

WAR- und EAR-Dateien
Alle Beispiele in diesem Beitrag beziehen sich auf JAR-Dateien, aber diese Beispiele funktionieren mit WAR- und EAR-Dateien. Als sehr vereinfachtes Beispiel hierfür zeigt der nächste Screenshot, jar uvf
wie eine WAR-Datei mit einem neuen Webdeskriptor aktualisiert wird. Der Inhalt der tatsächlich beteiligten Dateien spielt für die Zwecke dieser Abbildung keine Rolle. Die wichtige Bemerkung ist, dass eine WAR-Datei genauso wie eine JAR-Datei bearbeitet werden kann. Dies gilt auch für EAR-Dateien.

Andere Glasoperationen und Optionen
In diesem Beitrag habe ich mich auf die "CRUD" -Operationen (Erstellen / Lesen / Aktualisieren / Löschen) und das Extrahieren konzentriert, die über die Befehlszeile von Java-Archivdateien ausgeführt werden können. Ich habe normalerweise den anwendbaren Operationsbefehl "CRUD" ("c", "t", "u") oder den Extraktionsbefehl ("x") verwendet, der in Verbindung mit den allgemeinen Optionen "v" (ausführlich) und "f" (Java) verwendet wird Name der Archivdatei, der explizit in der Befehlszeile angegeben ist). Der jar
Befehl unterstützt andere Vorgänge als diese, z. B. "M" (Steuern der Erstellung von Manifestdateien) und "0" (Steuern der Komprimierung). Ich habe auch nicht demonstriert, dass "i" zum Generieren von Indexinformationen für ein Java-Archiv verwendet wird.
Zusätzliche Ressourcen für die Arbeit mit Java-Archiven
Ich habe diese bereits erwähnt, fasse sie hier jedoch der Einfachheit halber zusammen.
- Java-Tutorials: Verpackungsprogramme in JAR-Dateien
- Oracle Tools-Dokumentation zu jar Command
- jar man Page
Fazit
Der jar
Befehl ist relativ einfach zu verwenden und kann in bestimmten Fällen der schnellste Ansatz zum Erstellen, Anzeigen und Ändern des Inhalts von Java-Archivdateien sein. Die Vertrautheit mit diesem Befehlszeilentool kann sich für den Java-Entwickler von Zeit zu Zeit auszahlen, insbesondere wenn Sie an einer sich stark wiederholenden Aufgabe arbeiten oder eine Aufgabe mit Skripten ausführen. IDEs und Tools (insbesondere Build-Tools) können bei der Manipulation von Java-Archivdateien sehr hilfreich sein, aber manchmal ist der "Overhead" dieser Dateien viel größer als bei Verwendung jar
über die Befehlszeile erforderlich .
Diese Geschichte "Manipulieren von JARs, WARs und EARs in der Befehlszeile" wurde ursprünglich von marxsoftware.blogspot.com veröffentlicht.