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 cOption " " 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  jarder uOption " " 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.txtzu dieser JAR hinzufügen  .

Wenn ich eine Datei in einem vorhandenen Archiv aktualisieren möchte, kann ich diese Datei mit extrahieren,  jar xvfdie 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.