Was genau enthält eine JAR-Datei?

84

Als Praktikant verwende ich in meinen Projekten Buchungskreis und sie senden mir normalerweise eine jarDatei, mit der ich arbeiten kann. Ich füge es zu dem Build - pathin Eclipseund in der Regel ist alles schön und gut.

Ich wurde jedoch neugierig, was jede Klasse enthielt, und wenn ich versuche, eine der Klassen in der jarDatei zu öffnen , wird mir mitgeteilt, dass ich eine Quelldatei benötige.

Was bedeutet das? Ich komme aus einem C / C ++ - Hintergrund, jarähnelt also einer bereits kompilierten .oDatei und alles, was ich sehen kann, ist das .hZeug? Oder ist in der von jarmir verwendeten Datei tatsächlich Code enthalten , der verschlüsselt ist, sodass ich ihn nicht lesen kann?

Danke für alle Antworten!

Bearbeiten:
Danke, Leute, ich wusste, dass es eine Art Archiv ist, aber ich war verwirrt darüber, warum ich beim Versuch, die .classDateien zu öffnen , eine Reihe zufälliger Zeichen bekam. Die Ausgabe war ähnlich, als ich versuchte, eine .oDatei in C zu öffnen, also wollte ich nur sicher gehen.
Vielen Dank!

Joshualan
quelle
1
JAR-Dateiformat
mellamokb
5
@ Blue Moon: Das Lustige ist, dass Google mich hierher führt. : p
user1036719
@ user1036719 Obwohl es gut ist, dass Sie hier eine Antwort gefunden haben, gibt es noch einen weiteren Link, der davor steht . Und dies ist nicht wirklich eine Programmierfrage, die auf SO gefördert werden muss. Ich habe jedoch nicht abgestimmt oder abgestimmt.
PP

Antworten:

87

Eine JAR-Datei ist eigentlich nur eine ZIP-Datei. Es kann alles enthalten - normalerweise enthält es kompilierten Java-Code (* .class), manchmal aber auch Java-Quellcode (* .java).

Java kann jedoch dekompiliert werden - falls der Entwickler seinen Code verschleiert, erhalten Sie jedoch keine nützlichen Klassen- / Funktions- / Variablennamen.

DiebMaster
quelle
53

Ich wurde jedoch neugierig, was jede Klasse enthielt, und wenn ich versuche, eine der Klassen in der JAR-Datei zu öffnen, wird mir mitgeteilt, dass ich eine Quelldatei benötige.

Eine JAR-Datei ist im Grunde eine Zip-Datei, die .class-Dateien und möglicherweise andere Ressourcen (und Metadaten zum JAR selbst) enthält. Es ist schwer, C wirklich mit Java zu vergleichen, da Java-Bytecode viel mehr Metadaten enthält als die meisten Binärformate - aber die Klassendatei ist kompilierter Code anstelle von Quellcode.

Wenn Sie die JAR-Datei entweder mit einem Zip-Dienstprogramm öffnen oder ausführen jar xf foo.jar, können Sie die Dateien daraus extrahieren und sie sich ansehen. Beachten Sie, dass Sie keine JAR-Datei benötigen , um Java-Code auszuführen. Klassenladeprogramme können Klassendaten direkt aus dem Dateisystem oder aus URLs sowie aus JAR-Dateien laden.

Jon Skeet
quelle
Danke, ich wusste, dass es wie ein Archiv war, da ich es entpacken konnte, aber ich war verwirrt, warum keine der .class-Dateien lesbaren Text enthielt. Vielen Dank für die Erklärung, ich denke, eine .class ist wie eine .o-Datei.
Joshua
19

Der beste Weg, um zu verstehen, was die JAR-Datei enthält, besteht darin, Folgendes auszuführen:

Gehen Sie zur Befehlszeile und führen Sie sie aus jar tvf jarfilename.jar

Ajay George
quelle
13

Eine jarDatei ist eine Zip-Datei mit einigen zusätzlichen Dateien, die Metadaten enthalten. (Trotz der Erweiterung .jar ist es im Zip-Format, und alle Dienstprogramme, die sich mit .zip-Dateien befassen, können auch mit .jar-Dateien umgehen.)

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

Jar-Dateien können jede Art von Dateien enthalten, enthalten jedoch normalerweise Klassendateien und unterstützende Konfigurationsdateien (Eigenschaften), Grafiken und andere Datendateien, die von der Anwendung benötigt werden.

Klassendateien enthalten kompilierten Java-Code, der von der Java Virtual Machine ausgeführt werden kann.

http://en.wikipedia.org/wiki/Java_class_file

theglauber
quelle
1
plus 1, weil Sie auf den Standard verlinken
Ciro Santilli 法轮功 冠状 病 六四 六四 3
9

JAR steht für Java ARchive. Es ist ein Dateiformat, das auf dem beliebten ZIP-Dateiformat basiert und zum Zusammenfassen vieler Dateien zu einer Datei verwendet wird. Obwohl JAR als allgemeines Archivierungswerkzeug verwendet werden kann, bestand die Hauptmotivation für seine Entwicklung darin, dass Java-Applets und ihre erforderlichen Komponenten (.class-Dateien, Bilder und Sounds) in einer einzigen HTTP-Transaktion in einen Browser heruntergeladen werden können, anstatt sie zu öffnen eine neue Verbindung für jedes Stück. Dies verbessert die Geschwindigkeit, mit der ein Applet auf eine Webseite geladen und in Betrieb genommen werden kann, erheblich. Das JAR-Format unterstützt auch die Komprimierung, wodurch die Größe der Datei verringert und die Downloadzeit noch weiter verbessert wird. Zusätzlich können einzelne Einträge in einer JAR-Datei vom Applet-Autor digital signiert werden, um ihre Herkunft zu authentifizieren.

oxy_js
quelle
4

Die Jar-Datei enthält kompilierte Java-Binärklassen, deren Form durch Dekompilieren mit einem Open-Source-Dekompiler *.classin eine lesbare .javaKlasse konvertiert werden kann . Das JAR hat auch eine Option, META-INF/MANIFEST.MFdie uns sagt, wie die JAR-Datei verwendet wird - gibt andere JAR-Dateien zum Laden mit dem JAR an.

Piyush Mattoo
quelle
3

Jar (Java Archive) enthält eine Gruppe von .class-Dateien.

1.Um Jar-Datei zu erstellen (Zip-Datei)

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually its not feasible for only one .class file)

 if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class

 if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class

2. Um Jar-Datei zu extrahieren (Datei entpacken)

    jar -xvf NameOfJarFile.jar

3.Um das Inhaltsverzeichnis anzuzeigen

    jar -tvf NameOfJarFile.jar
Bishwas Pokharel
quelle
1

Eine JAR-Datei ähnelt einer EXE-Datei. Im Wesentlichen handelt es sich bei beiden um ausführbare Zip-Dateien (verschiedene Zip-Algorithmen).

In einer JAR-Datei sehen Sie Ordner und Klassendateien. Jede Klassendatei ähnelt Ihrer O-Datei und ist ein kompiliertes Java-Archiv.

Wenn Sie den Code in einer JAR-Datei sehen möchten, laden Sie einen Java-Dekompiler (hier zu finden: http://java.decompiler.free.fr/?q=jdgui ) und einen JAR-Extraktor (7zip funktioniert einwandfrei ) herunter .

Tyzoid
quelle
1

JD-GUI ist ein sehr praktisches Tool zum Durchsuchen und Dekompilieren von JARs

Anton Arhipov
quelle
1
Dies beantwortet die Frage nicht.
Craig Fisher
1

Eine JAR-Datei enthält kompilierten Code (* .class-Dateien) und andere Daten / Ressourcen, die sich auf diesen Code beziehen. Sie können mehrere Dateien in einer einzigen Archivdatei bündeln. Es enthält auch Metadaten. Da es sich um eine Zip-Datei handelt, können die darin enthaltenen Daten komprimiert werden.

Ein paar Dinge, die ich nützlich fand.

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

Das Buch OSGi definiert JAR-Dateien in der Praxis wie folgt: "JARs sind Archivdateien, die auf dem ZIP-Dateiformat basieren und es ermöglichen, viele Dateien zu einer einzigen Datei zusammenzufassen. In der Regel sind die im Archiv enthaltenen Dateien eine Mischung aus kompilierten Java-Klassendateien und Ressourcen Dateien wie Bilder und Dokumente. Zusätzlich definiert die Spezifikation einen Standardspeicherort innerhalb eines JAR-Archivs für Metadaten - den META-INF-Ordner - und mehrere Standarddateinamen und -formate direkt darin, von denen der wichtigste die MANIFEST.MF-Datei ist. "

Wazza
quelle
1

Überprüfen Sie einfach, ob die aopalliance.jarDatei .javaDateien anstelle von .classDateien enthält. Wenn ja, extrahieren Sie einfach die JAR-Datei, importieren Sie sie in Eclipse und erstellen Sie ein JAR durch Eclipse. Es hat bei mir funktioniert.

Ghanshyam
quelle
1

Beim Erlernen von JAR bin ich auf diesen Thread gestoßen, konnte jedoch nicht genügend Informationen für Personen wie mich mit .NET-Hintergrund abrufen. Daher werde ich einige Punkte hinzufügen, die Personen wie mir mit .NET-Hintergrund helfen können.

Zuerst müssen wir ein ähnliches Konzept wie JAR in .NET definieren, das Assembly ist, und Assembly hat viele Gemeinsamkeiten mit Java-JAR-Dateien.

Eine Assembly ist also die grundlegende Einheit für das Code-Packaging in der .NET-Umgebung. Assemblies sind in sich geschlossen und enthalten normalerweise den Zwischencode aus dem Kompilieren von Klassen, Metadaten zu den Klassen und alle anderen Dateien, die der gepackte Code zur Ausführung seiner Aufgabe benötigt. Da Assemblys die grundlegende Einheit der Code-Verpackung sind, müssen auf Assembly-Ebene verschiedene Aktionen im Zusammenhang mit der Interaktion mit Typen ausgeführt werden. Beispielsweise werden Sicherheitsberechtigungen, Codebereitstellung und Versionsverwaltung auf Assemblyebene erteilt.

Java-JAR- Dateien führen eine ähnliche Aufgabe in Java aus, wobei die meisten Unterschiede in der Implementierung bestehen. Assemblies werden normalerweise als EXEs oder DLLs gespeichert, während JAR-Dateien im ZIP- Dateiformat gespeichert werden.

Informationsquelle -> 5- Baugruppen

Muhammad Waqas Dilawar
quelle