it-swarm.com.de

Was genau enthält eine JAR-Datei?

Als Praktikant verwende ich in meinen Projekten einen Buchungscode, der mir normalerweise eine jar-Datei zur Verfügung stellt. Ich füge es dem Build path in Eclipse hinzu und normalerweise ist alles in Ordnung.

Ich wurde jedoch neugierig, was jede Klasse enthielt und wenn ich versuche, eine der Klassen in der jar-Datei zu öffnen, wird mir gesagt, dass ich eine Quelldatei brauche.

Was bedeutet das? Ich komme aus einem C/C++ Hintergrund, also ist eine jar einer bereits kompilierten .o-Datei ähnlich und alles, was ich sehen kann, ist das .h-Zeug? Oder gibt es in der jar-Datei, die ich verwende, tatsächlich verschlüsselten Code, damit ich ihn nicht lesen kann?

Danke für alle Antworten!

Bearbeiten:
Danke, Leute, ich wusste, es war eine Art von Archiv, aber ich war verwirrt, warum ich beim Öffnen der .class-Dateien eine Reihe zufälliger Zeichen bekam. Die Ausgabe war ähnlich, als ich versuchte, eine .o-Datei in C zu öffnen, also wollte ich nur sichergehen.
Vielen Dank!

63
joshualan

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

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

68
ThiefMaster

Ich wurde jedoch neugierig auf das, was jede Klasse enthielt. Wenn ich versuche, eine der Klassen in der JAR-Datei zu öffnen, wird mir gesagt, dass ich eine Quelldatei brauche.

Eine JAR-Datei ist im Wesentlichen eine ZIP-Datei, die .class-Dateien und möglicherweise andere Ressourcen (und Metadaten über das JAR selbst) enthält. Es ist schwer, C mit Java zu vergleichen, da der Java-Bytecode sehr viel mehr Metadaten enthält als die meisten Binärformate. Die Klassendatei is kompilierte statt Quellcode.

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

47
Jon Skeet

Der beste Weg, um zu verstehen, was die JAR-Datei enthält, ist, indem Sie Folgendes ausführen:

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

15
Ajay George

Eine jar-Datei 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 mit ZIP-Dateien arbeiten, können auch mit .jar-Dateien umgehen.)

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

Jar-Dateien können alle Arten von Dateien enthalten, sie 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

10
theglauber

JAR steht für Java ARchive. Es ist ein Dateiformat, das auf dem beliebten ZIP-Dateiformat basiert und zum Zusammenfassen vieler Dateien zu einem einzigen 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) mit einem einzigen HTTP-Vorgang in einen Browser heruntergeladen und nicht geöffnet werden können eine neue Verbindung für jedes Stück. Dadurch wird die Geschwindigkeit, mit der ein Applet auf eine Webseite geladen werden kann, erheblich verbessert. Das JAR-Format unterstützt auch die Komprimierung, wodurch die Dateigröße reduziert und die Downloadzeit weiter verbessert wird. Darüber hinaus können einzelne Einträge in einer JAR-Datei vom Applet-Autor digital signiert werden, um ihren Ursprung zu authentifizieren.

6
oxy_js

Die Jar-Datei enthält kompilierte Java-Binärklassen in Form von *.class, die in eine lesbare .Java-Klasse konvertiert werden können, indem sie mit einem Open-Source-Dekompiler dekompiliert wird. Die jar verfügt auch über einen optionalen META-INF/MANIFEST.MF, der uns die Verwendung der jar-Datei mitteilt - gibt andere jar-Dateien zum Laden mit der jar an.

4
Piyush Mattoo

JD-GUI ist ein sehr nützliches Werkzeug zum Durchsuchen und Dekompilieren von JARs

2
Anton Arhipov

Prüfen Sie einfach, ob die aopalliance.jar-Datei .Java-Dateien anstelle von .class-Dateien enthält. Wenn dies der Fall ist, extrahieren Sie einfach die JAR-Datei, importieren Sie sie in Eclipse und erstellen Sie eine E-Box mit Eclipse. Es hat für mich funktioniert. 

1
Ghanshyam

Eine .jar-Datei ähnelt einer .exe-Datei . Im Wesentlichen handelt es sich dabei um ausführbare Zip-Dateien (verschiedene Zip-Algorithmen).

In einer JAR-Datei werden Ordner und Klassendateien angezeigt. Jede Klassendatei ähnelt Ihrer .o-Datei und ist ein kompiliertes Java-Archiv.

Wenn Sie den Code in einer JAR-Datei anzeigen möchten, laden Sie einen Java-Decompiler (hier: http://Java.decompiler.free.fr/?q=jdgui ) und einen .jar-Extraktor (7Zip funktioniert einwandfrei) ).

1
Tyzoid

Nach meinem Verständnis ist die Jar-Datei die gleiche wie die Zip-Datei, hat aber ausführbare Dateien.

Wenn Sie keine ausführbaren Dateien in Jar haben, dann wäre es die gleiche wie die Zip-Datei.

Da die Jar-Datei ausführbare Dateien enthält, können diese problemlos in Ihren Code geladen und leicht an andere übertragen werden, um ihn zu verwenden.

0
Srekk

Während ich etwas über JAR erfuhr, bin ich auf diesen Thread gestoßen, konnte aber nicht genug Informationen für Leute wie mich mit .NET-Hintergrund erhalten. Ich werde also einige Punkte hinzufügen, die Personen wie mir mit .NET-Hintergrund helfen können.

Zunächst müssen wir ein ähnliches Konzept für JAR in .NET definieren, das Assembly ist und Assembly viele Gemeinsamkeiten mit Java-JAR-Dateien aufweist. 

Eine Assembly ist also die grundlegende Einheit der Code-Paketierung in der .NET-Umgebung. Assemblies sind in sich abgeschlossen und enthalten in der Regel den Zwischencode aus kompilierenden Klassen, Metadaten zu den Klassen und anderen Dateien, die der gepackte Code zur Ausführung seiner Aufgabe benötigt. Da Baugruppen die grundlegende Einheit für die Codierung von Code sind, müssen auf Baugruppenebene mehrere Aktionen für die Interaktion mit Typen ausgeführt werden. Zum Beispiel, das Erteilen von Sicherheitsberechtigungen, die Code-Bereitstellung und die Versionierung erfolgen auf Assembly-Ebene.

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

Informationsquelle -> 5- Baugruppen

0
Wiqi

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

1.Zur Erstellung der Jar-Datei (Zip-Datei)

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it’s 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.Entfernen der Jar-Datei (Datei entpacken)

    jar -xvf NameOfJarFile.jar

3.Zum Inhaltsverzeichnis anzeigen

    jar -tvf NameOfJarFile.jar
0

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

In der Praxis definiert das Buch OSGi JAR-Dateien als "JARs" sind Archivdateien, die auf dem ZIP-Dateiformat .__ basieren. Dadurch können viele Dateien in einer einzigen Datei zusammengefasst werden. Normalerweise sind die im Archiv enthaltenen Dateien Eine Mischung aus Kompilierte Java-Klassendateien und Ressourcendateien (z. B. Bilder und Dokumente) Darüber hinaus definiert die Spezifikation einen -Standort in einem JAR-Archiv für Metadaten (den META-INF-Ordner ) sowie mehrere Standarddateinamen und -formate das direkt, am meisten wichtig ist die MANIFEST.MF-Datei. "

0
Wazza