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?
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).
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
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.
(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
.