Affichage du contenu d'un fichier .jar

226

Quelle serait la façon la plus simple d'afficher des classes, des méthodes, des propriétés, etc. dans un fichier jar? Je cherche quelque chose d'équivalent au très utile Lutz Roeder .NET Reflector - pour Java

Dani
la source
12
Pourquoi n'acceptez-vous pas la réponse?
Sanghyun Lee
4
@HughLee Le gars qui a posé cette question a demandé il y a 8 ans . C'est pourquoi il doit y avoir une acceptation automatique après qu'une réponse atteigne 100 votes positifs IMO
Kolob Canyon
@KolobCanyon true, mais la réponse la mieux notée a été soumise le même jour que celle-ci
Pranav A.
1
La réponse vient de: https://superuser.com/a/808938/1045397 Vous pouvez le faire avec vim vim file_name.jar
byte mamba

Réponses:

280

En utilisant le JDK, listera jar -tfles fichiers dans le pot. javapvous donnera plus de détails sur un fichier de classe particulier.

Tom Hawtin - sellerie
la source
3
@salvob Vous n'avez pas besoin du trait d'union comme il faut après taravec les options obligatoires.
Tom Hawtin - tackline
2
Pour info, vous devrez peut-être ajouter C:\Program Files\Java\jdk<version>\binà votre variable d'environnement système ou utilisateur PATH avant de pouvoir l'utiliser jarcomme commande système. (Où <version> est votre numéro de build de version jdk. Vérifiez-le C:\Program Files\Java)
Tezra
1
exemple javap: javap -classpath test.jar com.yourpackage.HelloWorld
mPrinC
pour voir le contenu d'un fichier non-classe (comme manifeste) vous voudriez faire quelque chose comme ceci: tar -xOzf test.jarjar tf test.jar | grep MANIFEST
mPrinC
55

Je les ouvre généralement avec 7-Zip ... Cela permet au moins de voir les packages, les classes et les ressources.
Si j'ai besoin de voir des méthodes ou des champs, j'utiliserais Jad mais bien sûr, il vaut mieux se fier à (bon) JavaDoc ...

Maintenant, quelque part sur SO a été mentionné certains plug-ins Eclipse, pour trouver dans quel fichier jar une classe se trouve, ils peuvent peut-être faire plus (c'est-à-dire ce que vous avez demandé).

[EDIT] Référence au thread SO. Pas ce qui est demandé, mais en quelque sorte lié, donc utile: Java: Comment savoir quel fichier jar utiliser en fonction d'un nom de classe?

PhiLho
la source
Le lien vers le site Jad a été supprimé car l'URL est parquée. Il peut toujours être trouvé sur web.archive.org/web/20080106184313/http://www.kpdus.com/… mais Jad est aujourd'hui dépassé de toute façon.
PhiLho
35

Ce que j'utilise personnellement, c'est JD-GUI. Il s'agit d'un «décompilateur» gratuit, car il vous permet de voir le code source, les classes et les objets dans les classes, ainsi que la structure des fichiers dans un menu arborescent à gauche. Cependant, il ne vous permet pas de modifier directement les classes.

Site Web de JD-GUI: http://jd.benow.ca/

Azulflame
la source
Cela fonctionne sur plusieurs plates-formes tandis que 7-Zip mentionné dans une autre réponse est spécifique à Windows.
Brad Cupit
J'ai utilisé Archive Utility sur OS X, a bien fonctionné. La plupart des utilitaires (dé) zip devraient fonctionner, quelle que soit la plate-forme.
Greenonline
23

Dans le cas où quelqu'un ne le sait pas déjà, un fichier JAR est juste un fichier ZIP qui contient les classes du programme, les ressources, etc., et certaines métadonnées. Vous pouvez en extraire un pour voir comment il est assemblé.

Par conséquent, j'utilise une unzipcommande facile à mémoriser et à utiliser.

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

Par exemple, si vous avez un fichier jar avec nom, test.jaralors unzip -l test.jarlistera tout le contenu du fichier jar.

Bien que toutes les autres réponses soient excellentes, mais dans la plupart d'entre elles, vous devrez utiliser un logiciel comme 7 zipou JDKou un autre outil d'éclipse alors que cela ne vous oblige pas à avoir l'un de ces gros s / w et il vient par défaut sous linux et mac donc son très léger et pratique à utiliser .

Vous pouvez également utiliser zipinfo <your jar file>. si votre système d'exploitation le prend en charge.

Opster Elasticsearch Ninja
la source
1
@Boop merci pour la suggestion. l'ajouterai à ma réponse
Opster Elasticsearch Ninja
1
Si l'explorateur de fichiers prend en charge zip, renommer le pot en .zip fonctionne aussi (par exemple sur Windows)
Rhayene
16

Noms de méthodes, champs, etc.

En ajoutant un fichier jar à un projet dans un IDE, vous pouvez généralement voir les méthodes et les noms de champ, mais pas l'implémentation détaillée. NetBeans peut le faire, probablement Eclipse, probablement IntelliJ, etc. Vous pouvez parcourir la structure du pot directement dans l'EDI.

Juste le contenu

Pour quoi que ce soit, comme l'affichage du contenu, vous pouvez utiliser:

  • jar tvf jarfile.jar
  • winzip ou tout outil zip

Le code source

Pour accéder au code source, vous utiliseriez un décompilateur tel que JAD ou l'un de ses frontends ou un autre décompilateur. Si le code est obscurci, alors ...

Communauté
la source
10

En étendant la réponse de Tom Hawtin, vous pouvez diriger la liste pour filtrer la classe ou les fichiers souhaités:

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

Cela devrait fonctionner sur bash / zsh et similaires, ou sur eshell d'emacs.

Informations supplémentaires: https://docs.oracle.com/javase/tutorial/deployment/jar/view.html

Jose Miguel
la source
7
jar -tvf file_name.jar

ci-dessus n'imprimera que les noms des fichiers .

Pour afficher le contenu des fichiers, vous pouvez extraire les fichiers dans un dossier en:

jar -xvf file_name.jar

cela décompressera le fichier jar et mettra le contenu dans le même répertoire où vous l'exécutez.

Ou dans Windows, renommez le fichier .jar en .zip, puis vous pouvez décompresser pour extraire et afficher le contenu du fichier jar. Comme le pot est en interne un fichier zip.

Anil Kapoor
la source
6

Utilisez WinRar . Il ouvrira la structure des dossiers pour vous de manière intacte. Permet également l'édition en archive, tout en préservant les chemins.

Après tout, un fichier JAR est uniquement une archive ZIP.

MN
la source
6

Si vous aimez voir ce qu'il y a à l'intérieur, renommez simplement la première option ci-dessous.

  1. F2 & Rename to jarfile.zip // Utilisez une décompression ...

  2. jar tvf jarfile.jar

  3. jar tf jarfile.jar

Some Java Guy
la source
5

Si je comprends bien, vous voulez voir non seulement les classes mais aussi les méthodes, les propriétés, etc. Le seul outil que je connaisse qui puisse le faire est Eclipse - si vous ajoutez un bocal au projet classpath, vous pourrez parcourir ses classes avec des méthodes et des propriétés en utilisant l'explorateur de packages habituel.

Quoi qu'il en soit, c'est une bonne idée pour un bon outil Java autonome

Yoni Roit
la source
Notez que le bocal doit être dans le dossier "Bibliothèques référencées", pas seulement "libs". Et dans le cas de la bibliothèque Apache Commons, vous ne parcourez pas le fichier source.jar, vous parcourez l'original, puis vous attachez la source lorsque Eclipse le demande.
Noumenon
4

Jad est maladroit et n'est plus entretenu. Je suis passé à "Java Decompiler" , qui a une interface utilisateur fluide et prend en charge de nouvelles fonctionnalités de langage.

Chaque décompilateur que j'ai utilisé, cependant, s'exécute dans du code qu'il ne réussit pas à décompiler. Pour ceux-ci, cela aide à comprendre le code d'octets Java démonté produit par l'outil JDK standard, javap .

erickson
la source
3

Eh bien, un fichier jar est juste un fichier zip, donc si vous le décompressez (avec votre utilitaire de décompression préféré), vous obtenez tous les fichiers à l'intérieur.

Si vous voulez regarder à l'intérieur des fichiers de classe pour voir les méthodes, vous aurez besoin d'un outil pour cela. Comme PhiLho le mentionne, Eclipse est capable de le faire (par défaut), et je pense que la plupart des IDE Java en sont capables.

Jeroen Heijmans
la source
3

Dans Eclipse 3.4, faites

  1. Faites glisser le fichier jar en question dans un projet Java. Une copie du fichier jar apparaît.
  2. Faites un clic droit sur le fichier jar et choisissez "Build Path" -> "Add to Build Path".
  3. Le fichier Jar est déplacé vers le nœud "Bibliothèques référencées", où il peut être ouvert et parcouru dans le volet Explorateur de projets.

Si voir le code source est également un problème, ouvrez une nouvelle question.

Pour la navigation au niveau du fichier Jar (en tant que fichier zip), j'utilise 7zip qui fonctionne très bien et permet de voir et de modifier des entrées, ce qui est excellent pour le dépannage.

Thorbjørn Ravn Andersen
la source
3

Pour ce faire, vous pouvez ouvrir la perspective dans "Explorateur de packages". En faisant cela, vous pouvez voir la structure de votre pot avec les détails de la classe. Pour cela, vérifiez le dossier de bibliothèque de votre projet à l'aide de l'explorateur de packages.

Fenêtre >> Afficher la vue >> Autre >> Java >> Explorateur de packages

Une autre façon est que vous pouvez utiliser JarPlug en tant que plugin Eclipse. Cela fonctionne dans eclipse / springsource

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

Ziya
la source
3

Si vous êtes dans Windows et utilisez PowerShell et que vous recherchez un fichier dans un bocal, vous pouvez faire:

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

Vous pouvez les ouvrir avec la plupart des utilitaires de décompression de nos jours, puis obtenir quelque chose comme DJ Java Decompiler si vous souhaitez afficher la source.

John T
la source
2

Mon exigence était de visualiser le contenu d'un fichier (comme un fichier de propriétés) à l'intérieur du pot, sans réellement extraire le pot. Si quelqu'un a atteint ce fil comme moi, essayez cette commande -

unzip -p myjar.jar myfile.txt

Cela a bien fonctionné pour moi!

Subhashree Pradhan
la source
2

Je pense que Java Decomplier est votre meilleure option que vous pouvez télécharger à partir d'ici: http://jd.benow.ca/ Aperçu

Ziad Alzarka
la source
1

Je préfère le navigateur JAR , il a une interface simple où vous pouvez parcourir plusieurs JAR et rechercher une classe spécifique sur plusieurs JAR simultanément.

audiodude
la source
1

Eclipse 3.4 JDT

Ce n'est pas le moyen le plus rapide car vous devez d'abord le faire glisser dans votre éclipse. Mais vous aurez une navigation complète sur les classes Java, même avec la décompilation activée.

Dennis C
la source
1

J'ai défini l'action par défaut dans les fenêtres sur "Ouvrir avec WinZip". Cela facilite la gestion des fichiers JAR en tant qu'archives. Vous pouvez même ajouter / supprimer des fichiers manuellement.

Chris Nava
la source
1

Ce Jar Explorer est assez bon.
Prend en charge trois types de décompilateurs: JD, Procyon et Fernflower.
Permet de rechercher des fichiers et des doublons dans n'importe quelle archive java.
L'utilisateur peut également modifier le fichier jar par des fichiers D&D et éditer certains fichiers non-classe. entrez la description de l'image ici entrez la description de l'image ici

user12377884
la source
Veuillez ne pas simplement poster un outil ou une bibliothèque comme réponse. Démontrez au moins comment il résout le problème dans la réponse elle-même.
Das_Geek
0

Vous pouvez essayer JarSpy . Il existe une version plugin IDEA que j'utilise.

Dan Dyer
la source
0

Votre IDE devrait également prendre en charge cela. Mon IDE (SlickeEdit) l'appelle une «bibliothèque de balises». Ajoutez simplement une bibliothèque de balises pour le fichier jar, et vous devriez pouvoir parcourir les classes et les méthodes de manière hiérarchique.

ARBRE
la source
0

Vous pouvez essayer JarNavigator pour afficher et rechercher le contenu d'un fichier jar.

Kumaravel
la source
0

java -xf some-j.jar va décompresser un fichier JAR.

MKatleast3
la source
c'est jar -xf someJar.jar
Prajwal