Anzeigen des Inhalts einer JAR-Datei

226

Was ist der einfachste Weg, um Klassen, Methoden, Eigenschaften usw. in einer JAR-Datei anzuzeigen? Ich suche etwas, das dem sehr nützlichen Lutz Roeder .NET Reflector entspricht - für Java

Dani
quelle
12
Warum akzeptierst du die Antwort nicht?
Sanghyun Lee
4
@ HughLee Der Typ, der das gefragt hat, hat vor 8 Jahren gefragt . Deshalb muss es eine automatische Annahme geben, nachdem eine Antwort 100 positive Stimmen erreicht hat. IMO
Kolob Canyon
@ KolobCanyon wahr, aber die bestbewertete Antwort wurde am selben Tag eingereicht, an dem diese Frage gestellt wurde
Pranav A.
1
Die Antwort kommt von: https://superuser.com/a/808938/1045397 Sie können es mit vim vim file_name.jar tun
Byte mamba

Antworten:

280

Wenn Sie das JDK verwenden, jar -tfwerden die Dateien im JAR aufgelistet. javapgibt Ihnen weitere Details aus einer bestimmten Klassendatei.

Tom Hawtin - Tackline
quelle
3
@salvob Sie benötigen den Bindestrich nicht, da er tarmit den obligatorischen Optionen benötigt wird.
Tom Hawtin - Tackline
2
C:\Program Files\Java\jdk<version>\binZu Ihrer Information: Möglicherweise müssen Sie Ihrem System oder Benutzer die Umgebungsvariable PATH hinzufügen , bevor Sie sie jarals Systembefehl verwenden können. (Wobei <Version> Ihre JDK-Versionsnummer ist. Checken Sie sie ein C:\Program Files\Java)
Tezra
1
javap Beispiel: javap -classpath test.jar com.yourpackage.HelloWorld
mPrinC
Um den Inhalt von Nicht-Klassendateien (wie Manifest) zu sehen, möchten Sie jar tf test.jar | grep MANIFEST
Folgendes
55

Normalerweise öffne ich sie mit 7-Zip ... Es ermöglicht zumindest das Anzeigen von Paketen, Klassen und Ressourcen.
Sollte ich Methoden oder Felder sehen müssen, würde ich Jad verwenden, aber natürlich ist es besser, sich auf (gutes) JavaDoc zu verlassen ...

Irgendwo auf SO wurden einige Eclipse-Plug-Ins erwähnt, um herauszufinden, in welcher JAR-Datei sich eine Klasse befindet. Vielleicht können sie mehr (dh was Sie angefordert haben).

[EDIT] Verweis auf SO-Thread. Nicht was gefragt wird, sondern irgendwie verwandt, also nützlich: Java: Woher weiß ich, welche JAR-Datei unter einem Klassennamen verwendet werden soll?

PhiLho
quelle
Der Link zur Jad-Site wurde entfernt, da die URL geparkt ist. Es kann immer noch unter web.archive.org/web/20080106184313/http://www.kpdus.com/… gefunden werden, aber Jad ist heute sowieso veraltet.
PhiLho
35

Was ich persönlich benutze, ist JD-GUI. Es ist ein kostenloser 'Dekompiler', mit dem Sie den Quellcode, die Klassen und Objekte in den Klassen sowie die Dateistruktur in einem Baummenü auf der linken Seite anzeigen können. Sie können die Klassen jedoch nicht direkt ändern.

Website von JD-GUI: http://jd.benow.ca/

Azulflamme
quelle
Dies funktioniert plattformübergreifend, während 7-Zip, das in einer anderen Antwort erwähnt wird, Windows-spezifisch ist.
Brad Cupit
Ich habe das Archivierungsprogramm unter OS X verwendet und es hat gut funktioniert. Die meisten (un) zip-Dienstprogramme sollten unabhängig von der Plattform funktionieren.
Greenonline
23

Falls jemand dies noch nicht weiß, ist eine JAR-Datei nur eine ZIP-Datei, die die Klassen, Ressourcen usw. des Programms und einige Metadaten enthält. Sie können eine extrahieren, um zu sehen, wie sie zusammengesetzt ist.

Daher verwende ich einen unzipBefehl, der leicht zu merken und zu verwenden ist.

unzip -l <jar-file-name>.jar

Zum Beispiel, wenn Sie eine JAR - Datei mit dem Namen haben test.jardann unzip -l test.jarlisten alle den Inhalt der JAR - Datei.

Alle anderen Antworten sind zwar großartig, aber in den meisten von ihnen müssten Sie eine Software wie 7 zipoder JDKein anderes Eclipse-Tool verwenden, obwohl Sie dafür keine dieser großen S / W-Dateien benötigen und diese standardmäßig unter Linux verfügbar sind und Mac so ist es sehr leicht und handlich zu bedienen .

Sie können auch verwenden zipinfo <your jar file>. wenn Ihr Betriebssystem dies unterstützt.

Opster Elasticsearch Ninja
quelle
1
@Boop danke für den Vorschlag. wird es zu meiner Antwort hinzufügen
Opster Elasticsearch Ninja
1
Wenn der Datei-Explorer zip unterstützt, funktioniert das Umbenennen des JAR in .zip auch (zum Beispiel unter Windows)
Rhayene
16

Methodennamen, Felder usw.

Wenn Sie einem Projekt in einer IDE ein JAR hinzufügen, werden normalerweise Methoden und Feldnamen angezeigt, nicht jedoch die detaillierte Implementierung. NetBeans kann das, Eclipse wahrscheinlich, IntelliJ wahrscheinlich usw. Sie können die JAR-Struktur direkt in der IDE durchsuchen.

Nur der Inhalt

Zum Anzeigen des Inhalts können Sie Folgendes verwenden:

  • jar tvf jarfile.jar
  • winzip oder ein beliebiges Zip-Tool

Der Quellcode

Um auf den Quellcode zuzugreifen, verwenden Sie einen Dekompiler wie JAD oder eines seiner Frontends oder einen anderen Dekompiler. Wenn der Code verschleiert ist, dann ...

Gemeinschaft
quelle
10

Wenn Sie die Antwort von Tom Hawtin erweitern, können Sie die Liste weiterleiten, um die gewünschten Klassen oder Dateien herauszufiltern:

jar tf my-fat-jar-file.jar | grep filename

Dies sollte auf bash / zsh und ähnlichen oder emacs 'eshell funktionieren.

Zusätzliche Informationen: https://docs.oracle.com/javase/tutorial/deployment/jar/view.html

Jose Miguel
quelle
7
jar -tvf file_name.jar

oben werden nur die Namen der Dateien gedruckt .

Um den Inhalt von Dateien anzuzeigen, können Sie die Dateien in einem Ordner extrahieren, indem Sie:

jar -xvf file_name.jar

Dadurch wird die JAR-Datei entpackt und der Inhalt in dasselbe Verzeichnis gestellt, in dem Sie dies ausführen.

Oder benennen Sie in Windows die JAR-Datei in ZIP um und entpacken Sie sie, um den Inhalt der JAR-Datei zu extrahieren und anzuzeigen. Als jar ist intern eine zip datei.

Anil Kapoor
quelle
6

Verwenden Sie WinRar . Die Ordnerstruktur wird auf intakte Weise für Sie geöffnet. Ermöglicht auch die Bearbeitung im Archiv unter Beibehaltung von Pfaden.

Schließlich ist eine JAR-Datei nur ein ZIP-Archiv.

MN
quelle
6

Wenn Sie sehen möchten, was sich darin befindet, benennen Sie es einfach als erste Option unten um.

  1. F2 & Rename to jarfile.zip // Benutze einen beliebigen Reißverschluss ...

  2. jar tvf jarfile.jar

  3. jar tf jarfile.jar

Ein Java-Typ
quelle
5

Wenn ich das richtig verstehe, möchten Sie nicht nur Klassen, sondern auch Methoden, Eigenschaften usw. sehen. Das einzige Tool, von dem ich weiß, dass es dies kann, ist Eclipse. Wenn Sie dem Projektklassenpfad ein JAR hinzufügen, können Sie seine Klassen mit Methoden und Eigenschaften mit dem üblichen Paket-Explorer durchsuchen.

Auf jeden Fall ist dies eine gute Idee für ein gutes eigenständiges Java-Tool

Yoni Roit
quelle
Beachten Sie, dass sich das JAR im Ordner "Referenzierte Bibliotheken" befinden muss, nicht nur im Ordner "libs". Und im Fall der Apache Commons-Bibliothek durchsuchen Sie nicht die Datei source.jar, sondern das Original und hängen die Quelle an, wenn Eclipse Sie dazu auffordert.
Noumenon
4

Jad ist klunkig und wird nicht mehr gepflegt. Ich habe zu "Java Decompiler" gewechselt , das eine übersichtliche Benutzeroberfläche hat und neue Sprachfunktionen unterstützt.

Jeder Dekompiler, den ich verwendet habe, stößt auf Code, den er nicht erfolgreich dekompiliert. Für diese hilft es, den zerlegten Java-Bytecode zu verstehen, der vom Standard-JDK-Tool javap erzeugt wird .

erickson
quelle
3

Nun, eine JAR-Datei ist nur eine Zip-Datei. Wenn Sie sie also entpacken (mit Ihrem bevorzugten Dienstprogramm zum Entpacken), erhalten Sie alle darin enthaltenen Dateien.

Wenn Sie in die Klassendateien schauen möchten, um die Methoden zu sehen, benötigen Sie dafür ein Tool. Wie PhiLho erwähnt, kann Eclipse dies (standardmäßig), und ich würde denken, dass die meisten Java-IDEs dazu in der Lage sind.

Jeroen Heijmans
quelle
3

In Eclipse 3.4 tun

  1. Ziehen Sie die betreffende JAR-Datei in ein Java-Projekt. Eine Kopie der JAR-Datei wird angezeigt.
  2. Klicken Sie mit der rechten Maustaste auf die JAR-Datei und wählen Sie "Erstellungspfad" -> "Zum Erstellungspfad hinzufügen".
  3. Die Jar-Datei wird in den Knoten "Referenzierte Bibliotheken" verschoben, wo sie im Projekt-Explorer-Bereich geöffnet und navigiert werden kann.

Wenn auch das Anzeigen von Quellcode ein Problem darstellt, öffnen Sie eine neue Frage.

Für die Navigation auf Jar-Dateiebene (als Zip-Datei) verwende ich 7zip, das sehr gut funktioniert und das Anzeigen und Bearbeiten von Einträgen ermöglicht, was sich hervorragend zur Fehlerbehebung eignet.

Thorbjørn Ravn Andersen
quelle
3

Eine Möglichkeit, dies zu tun, besteht darin, die Perspektive im "Paket-Explorer" zu öffnen. Auf diese Weise können Sie die Struktur Ihres Glases mit Klassendetails sehen. Überprüfen Sie dazu den Bibliotheksordner in Ihrem Projekt mit dem Paket-Explorer.

Fenster >> Ansicht anzeigen >> Andere >> Java >> Paket-Explorer

Eine andere Möglichkeit ist, JarPlug als Eclipse-Plugin zu verwenden. Dies funktioniert in Eclipse / Springsource

http://jar-plug.sourceforge.net/

Ziya
quelle
3

Wenn Sie sich in Windows befinden und Powershell verwenden und nach einer Datei in einem Glas suchen, können Sie Folgendes tun:

jar -tf .\[JAR_NAME] | where {$_ -match "[FILENAME]"}
James
quelle
2

Sie können sie heutzutage mit den meisten Dekomprimierungsprogrammen öffnen und dann einfach so etwas wie DJ Java Decompiler herunterladen, wenn Sie die Quelle anzeigen möchten.

John T.
quelle
2

Meine Anforderung bestand darin, den Inhalt einer Datei (wie einer Eigenschaftendatei) im Glas anzuzeigen, ohne das Glas tatsächlich zu extrahieren. Wenn jemand diesen Thread genau wie ich erreicht hat, versuchen Sie diesen Befehl -

unzip -p myjar.jar myfile.txt

Das hat bei mir gut funktioniert!

Subhashree Pradhan
quelle
2

Ich denke, Java Decomplier ist Ihre beste Option, die Sie hier herunterladen können: http://jd.benow.ca/ Vorschau

Ziad Alzarka
quelle
1

Ich bevorzuge den JAR-Browser . Er verfügt über eine einfache Oberfläche, über die Sie mehrere JARs durchsuchen und über mehrere JARs hinweg gleichzeitig nach einer bestimmten Klasse suchen können.

Audiodude
quelle
1

Eclipse 3.4 JDT

Dies ist nicht der schnellste Weg, da Sie ihn zuerst in Ihre Sonnenfinsternis ziehen müssen. Sie können jedoch auch bei aktivierter Dekompilierung die Java-Klasse vollständig durchsuchen.

Dennis C.
quelle
1

Ich habe die Standardaktion in Windows auf "Mit WinZip öffnen" gesetzt. Dies erleichtert die Verwaltung von JARs als Archive. Sie können Dateien sogar manuell hinzufügen / entfernen.

Chris Nava
quelle
1

Dieser Jar Explorer ist gut genug.
Unterstützt drei Dekompilertypen: JD, Procyon und Fernflower.
Ermöglicht das Durchsuchen von Dateien und Duplikaten in jedem Java-Archiv.
Außerdem kann der Benutzer jar durch D & D-Dateien ändern und einige Nicht-Klassendateien bearbeiten. Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

user12377884
quelle
Bitte posten Sie nicht einfach ein Tool oder eine Bibliothek als Antwort. Zeigen Sie zumindest in der Antwort selbst , wie das Problem gelöst wird .
Das_Geek
0

Sie könnten JarSpy versuchen . Es gibt eine IDEA-Plugin-Version davon, die ich verwende.

Dan Dyer
quelle
0

Ihre IDE sollte dies ebenfalls unterstützen. Meine IDE (SlickeEdit) nennt es eine "Tag-Bibliothek". Fügen Sie einfach eine Tag-Bibliothek für die JAR-Datei hinzu, und Sie sollten in der Lage sein, die Klassen und Methoden hierarchisch zu durchsuchen.

BAUM
quelle
0

Sie können JarNavigator ausprobieren , um den Inhalt einer JAR-Datei anzuzeigen und zu durchsuchen.

Kumaravel
quelle
0

java -xf some-j.jar entpackt eine JAR-Datei.

MKatleast3
quelle
Es ist jar -xf someJar.jar
Prajwal