web-dev-qa-db-fra.com

Vous utilisez Terminal pour ouvrir un fichier dans un fichier jar?

Comment puis-je ouvrir et voir dans un fichier dans un fichier jar à partir de Terminal?

Je peux utiliser moins pour imprimer tous les fichiers contenus dans le fichier jar, mais comment puis-je ouvrir ces fichiers?

6
Kurru

Personnellement, j'utilise jar car cela me semble plus naturel et permet d'autres opérations telles que la mise à jour du contenu. Voici les commandes de lecture:

Contenu de la liste

jar tf myjar.jar

Extraire le contenu sur pwd

jar xf myjar.jar

Extraire un fichier spécifique, en créant des répertoires si nécessaire

jar xf myjar.jar /foo/bar.class

Extraire le bytecode lui-même n'est généralement pas très utile. Pour lui donner un sens, vous devez le décompiler en quelque chose de lisible.

Il n'y a pas beaucoup de bons décompilateurs Java parmi lesquels choisir. J'ai tendance à utiliser JD-GUI , car c'est rapide et fait ce dont j'ai besoin. Frustrement, sa fonctionnalité de recherche multi-fichiers ne fonctionne jamais pour moi (notez que la recherche sur la page avec Ctrl + F convient parfaitement). Ce n'est pas une grande perte cependant; vous pouvez le faire vider toutes les sources sur le disque avec Ctrl + Alt + S pour une lecture attentive avec grep/vim/Eclipse, etc.

Je l'installe comme ceci:

wget http://jd.benow.ca/jd-gui/downloads/jd-gui-0.3.5.linux.i686.tar.gz
tar xzf jd-gui-0.3.5.linux.i686.tar.gz
Sudo mv jd-gui /usr/local/bin/
Sudo chown root:root /usr/local/bin/jd-gui
Sudo chmod 755 /usr/local/bin/jd-gui

Son utilisation ressemble à ceci:

jd-gui myjar.jar
Ctrl+Alt+S; pick your path & save
Alt+F4
jar xf <path>/myjar.src.Zip 

Notez cependant que JD-GUI n'a pas d'interface CLI. Si vous connaissez un bon décompilateur CLI, cela m'intéresserait beaucoup (il existe JAD, mais autant que je sache, Java <1.5).

5
IlluminAce

En utilisant unzip, vous pouvez diriger un fichier de l’archive vers stdout, puis quelque chose de différent pour le lire, par exemple:

unzip -p /path/to/some.jar path/to/file/inside/jar | less

Depuis la mémoire, le décompression n’est pas installé par défaut. Vous devrez peut-être:

Sudo apt-get install unzip

Jeff

4
Jeff

les fichiers jar ne sont en réalité que des fichiers Zip que vous pouvez tester en le faisant.

file foo.jar

afin de lister les fichiers que vous pouvez faire simplement.

unzip -l foo.jar

Pour accéder aux fichiers, il suffit de décompresser le fichier avec

unzip foo.jar

Si vous voulez extraire un seul fichier, ajoutez les fichiers après

unzip foo.jar some/path/in/jar/bar.class

Assurez-vous d'utiliser le chemin complet de -l. Et gardez à l’esprit que cela créera le même chemin localement.

1
strings

(Aucun point de repère, il faut donc répondre pour répondre aux commentaires de @Kurro)

unzip (-p | -c) <jar-file> <file-in-jar>

Les options -p et -c extraient le fichier sur la sortie standard; -c donne au début 2 lignes de données supplémentaires (quel fichier JAR et quel fichier de l'archive).

J'ai trouvé cela extrêmement pratique pour lire le fichier Manifest ou les fichiers .xml. Pour les fichiers .class compilés, cela ne sert à rien, mais votre ami ici est javap:

javap -classpath <jar-file> <fully.qualified.class.name>    # without the .class suffix

Voici quelques options utiles: -c (décompiler en Java Assembly), -private pour afficher également les champs privés et -verbose pour de nombreuses informations supplémentaires. S'il s'agit d'un gros fichier, vous pouvez vouloir diriger la sortie via less.

1
Menachem