JAR -Paket -Implementierung
Das JAR -Paket kann mit der JAR -Anweisung verpackt werden. Wenn Sie JAR in die Befehlszeile eingeben, können Sie den Inhalt der JAR -Anweisung anzeigen
Aus den beiden in der letzten Show gezeigten Beispielen gibt es zwei Möglichkeiten zum Verpacken. Der Unterschied zwischen den beiden besteht darin, ob Sie die von Ihnen definierte Manifestdatei verwenden sollen. Das erste Beispiel wird nicht mit der Manifestdatei verpackt, daher ist die Manifestdatei im endgültigen generierten JAR -Paket die Standarddatei. Diese Methode ist für eine relativ einfache JAR -Paketstruktur geeignet, es gibt keine andere JAR -Paketabhängigkeit und das generierte JAR -Paket muss nicht ausführbar sein. Das auf diese Weise generierte JAR -Paket kann nicht mit dem Befehl java -jar XXX.jar ausgeführt werden, da der Programmeintrag in der Manifestdatei nicht angegeben ist. Die zweite Instanz ist eine relativ häufige Verpackungsmethode, dh eine benutzerdefinierte Manifestdatei, um an der Verpackung teilzunehmen, damit Sie dem Paket Abhängigkeiten hinzufügen und den Programmeintrag angeben können, um java -jar XXX.jar zu implementieren, um das JAR -Paket direkt auszuführen.
Die erste einfache Verpackungsmethode
Am einfachsten ist es, die kompilierte Klassen -Bytecode -Datei im aktuellen Ordner zu verpacken und auszugeben. Beispiele sind wie folgt:
Schreiben Sie drei Java -Dateien, test1.java test2.java und main.java
public class test1 {public static void main (String [] args) {} public void display () {System.out.println ("Dies ist Class Test1"); }}und test2.java -Datei
public class test2 {public static void main (String [] args) {} public void display () {System.out.println ("this is class test2"); }}Main.java
public class main {public static void main (String [] args) {für (string a: args) {System.out.println ("Gebed Parameter"+a); } Test1 T1 = neuer Test1 (); t1.display (); test2 T2 = neuer Test2 (); t2.display (); }} Kompilieren Sie diese drei Dateien in der Befehlszeile und verwenden Sie den Befehl Javac, um zu kompilieren.
Verwenden Sie die JAR -Anweisung, um die kompilierte Klassendatei zu verpacken
Die hinzugefügte Liste wird während der Verpackung angezeigt. Verwenden Sie das Dekompressionstool, um das generierte test.jar -Paket zu öffnen, und Sie können die folgende Struktur sehen:
Zusätzlich zu den kompilierten drei Klassendateien gibt es einen zusätzlichen Meta-Inf-Ordner, der ein Manifest.mf (Listendatei) enthält. Die Rolle dieser Datei ist sehr wichtig, wie später erläutert. Schauen wir uns zuerst den Inhalt darin an
Sehr einfaches Manifest, enthält nur Manifest -Version und Java -Version.
Ausführung von java -jar test.jar zu diesem Zeitpunkt hat den folgenden Effekt:
Kein Hauptlistenattributfehler gemeldet. Dies liegt daran, dass wir die erste Methode verwenden, um das Glas mit dem Standardmanifest zu generieren. Das Standardmanifest gibt den Programmeintrag nicht an, sodass ein Fehler auftritt.
Sie können die Manifestdatei direkt im JAR -Paket ändern (öffnen Sie das Dekompressionstool und speichern Sie sie nach dem Ändern) und ändern Sie sie in den folgenden Effekt:
Nachdem das Programm erneut java -jar test.jar ausgeführt hat, tritt das Programm in den richtigen Inhalt ein:
Das Hauptklassenattribut wird der Manifestdatei hinzugefügt und gibt den Programmeintrag an, der die direkte Ausführung der JAR-Datei realisiert.
Daher kann die Verwendung des Standardmanifest die JAR -Datei nicht direkt ausführen. Verwenden Sie entweder die Manifestdatei, die Sie definieren, um sie zu verpacken, oder ändern Sie die Manifestdatei im Paket.
Die zweite Art zu packen
Die zweite Verpackungsmethode ist allgemeiner. Im Allgemeinen ist die erste Zeile der Java -Datei package XXX; Das heißt, der Paketname, er bestimmt auch den Pfad der kompilierten Klassendatei. Wenn mehrere Java -Dateien zusammengestellt und verpackt werden müssen und sie unterschiedliche Paketnamen haben, ist es sehr unrealistisch, eine Datei zu einer Zeit zu schreiben, als sie sie gemäß der ersten Methode verpackt, sodass eine zweite Methode vorliegt. Setzen Sie alle Verzeichnisse, die in den Klassendateien vorhanden sind, und die Abhängigkeits -JAR -Pakete in einem Stammordner (wie FOO) und schreiben Sie dann eine Manifest -Manifestdatei, um den Programmeingang und andere Abhängigkeits -JAR -Pakete hinzugefügt zu haben. Bei der Ausführung des Befehls:
Beachten Sie , dass sich im obigen Befehl ein Platz und ein Punkt hinter foo/ Ordner befindet
Lassen Sie uns unten ein Beispiel sehen
Gleiches ist test1.java, test2.java und main.java, aber jeder hat seine eigenen Paketnamen.
Paket cn.myTest1; public class test1 {public static void main (String [] args) {} public void display () {System.out.println ("Dies ist Klassen test1"); }} Paket cn.myTest2; public class test2 {public static void main (String [] args) {} public void display () {System.out.println ("Dies ist klassifiziert test2"); }} Paket cn.Mymain; importieren cn.myTest1.Test1; importieren cn.myTest2.test2; public class main {public static void main (String [] args) {für (String -Element: args) {System.out.println ("Passing Parameter"+Element); } Test1 T1 = neuer Test1 (); test2 T2 = neuer Test2 (); t1.display (); t2.display (); }} Ebenfalls mit der Javac -Anweisung zusammengestellt, existieren die drei Klassendateien in verschiedenen Pfaden, da ihre Paketnamen unterschiedlich sind. Stellen Sie alle kompilierten Ordner mit Klassendateien in den FOO -Ordner ein:
Schreiben Sie dann eine Manifest -Datei außerhalb von Foo:
Der Inhalt des Manifests ist wie folgt:
Hinweis : Die letzte Zeile der Manifest -Datei ist eine leere Zeile.
Führen Sie den Befehl aus der Befehlszeile aus: jar cvfm test.jar MANIFEST.MF -C foo/ .
Testen Sie, ob das JAR -Paket direkt in der Befehlszeile ausgeführt werden kann. Verwenden Sie den Befehl java -jar test.jar
Packen Sie das Glas richtig ein und führen Sie das Glas erfolgreich aus.
Manifestdatei Einführung
In den beiden oben genannten Beispielen können wir sehen, dass die Manifestdatei für die Glasverpackung erforderlich ist. Die Manifest-Datei beschreibt die detaillierten Informationen der verpackten JAR-Datei und existiert im Ordner verpackter Meta-Inf. Der Hauptinhalt einer einfachen Manifestdatei lautet wie folgt:
Die Hauptsache ist, dass die drei Attribute der Hauptklassen-Klassenpfad der Manifest-Version bei der Erstellung von Glaspaketen sehr wichtig sind. Manifestversion ist die Versionsnummer, schreiben Sie sie einfach entsprechend. Hauptklasse ist das Eintragsprogramm des JAR-Pakets, das den vollständigen Namen der laufenden Klasse angibt (muss den Paketnamen enthalten). Auf diese Weise können Sie java -jar name.jar verwenden, um das JAR -Paket direkt auszuführen. Der dritte Klassenpfad bezieht sich auf andere JAR-Pakete, auf die bei der Verpackung angewiesen werden muss. Bei der Verpackung kann Ihr Programm auch andere JAR -Pakete enthalten, sodass Sie Abhängigkeiten hinzufügen müssen.
Beachten Sie, dass zwischen dem Dickdarm und dem Inhalt jedes Manifestattributs ein Platz besteht und es am Ende nach dem Schreiben eine leere Linie geben muss, da sonst in der Laufzeit ein Fehler auftritt, in dem das Hauptlistenattribut nicht gefunden werden kann.
Zusammenfassung
Das Schreiben von Manifestdateien, die anfällig für Formatfehler wie wenige Leerzeichen zwischen dem Dickdarm des Attributs und den Inhalten sind, keine Räume zwischen den Abhängigkeiten im Klassenpfad, zu viele Abhängigkeiten, keine Räume an den Anfängen, wenn die Aufmerksamkeit auf die Aufmerksamkeit auf sich zahlen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.