7 votes

Utiliser Terminal pour ouvrir un fichier dans un fichier jar ?

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

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

6voto

Jaskirat Points 1

Personnellement, j'utilise jar parce qu'elle semble plus naturelle et qu'elle permet également d'autres opérations telles que la mise à jour du contenu. Voici les commandes de lecture :

Liste des contenus

jar tf myjar.jar

Extraire le contenu de pwd

jar xf myjar.jar

Extraction d'un fichier spécifique, en créant des répertoires si nécessaire

jar xf myjar.jar /foo/bar.class

L'extraction du bytecode lui-même n'est généralement pas très utile. Pour le comprendre, il faut 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 Il est rapide et fait ce dont j'ai besoin. Malheureusement, sa fonction de recherche multi-fichiers ne fonctionne jamais pour moi (notez que la recherche Ctrl+F sur la page fonctionne bien). Ce n'est pas une grande perte cependant ; vous pouvez faire en sorte qu'il transfère toutes les sources sur le disque avec Ctrl+Alt+S pour les consulter avec grep/vim/Eclipse, etc.

Je l'installe comme suit :

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

L'utilisation se fait de la manière suivante :

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, je serais très intéressé de le connaître (il y a JAD, mais AFAIK qui ne supporte que Java < 1.5).

4voto

Jeff Points 123

En utilisant unzip, vous pouvez envoyer un fichier de l'archive vers stdout et ensuite vers quelque chose d'autre pour le lire, comme par exemple :

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

De mémoire, unzip n'est pas installé par défaut, vous pourriez donc en avoir besoin :

sudo apt-get install unzip

Jeff

1voto

strings Points 1306

Les fichiers jar ne sont en fait que des fichiers zip, ce que vous pouvez vérifier en faisant.

file foo.jar

Ainsi, pour lister les fichiers, il suffit de faire.

unzip -l foo.jar

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

unzip foo.jar

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

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

Veillez à utiliser le chemin complet indiqué par -l. Et gardez à l'esprit qu'il créera le même chemin localement.

1voto

Paul Miller Points 165

(Pas de points de fidélité, donc je dois répondre aux commentaires de @Kurro)

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

En -p y -c permettent d'extraire le fichier vers la sortie standard ; -c donne deux lignes de données supplémentaires au début (quel fichier JAR et quel fichier dans l'archive).

J'ai trouvé cela très pratique pour lire le fichier Manifest ou les fichiers .xml. Pour le fichier .class fichiers, c'est inutile, mais votre ami ici présent est javap :

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

Voici quelques options utiles : -c (décompilation 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 voudrez peut-être faire passer la sortie par l'intermédiaire de less .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X