web-dev-qa-db-fra.com

Comment lire le fichier MANIFEST.MF à partir de JAR en utilisant Bash

J'ai besoin de lire le fichier manifeste MANIFEST.MF maven depuis "some.jar" en utilisant bash

76
Roman
$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF
  • -q supprimera la sortie détaillée du programme de décompression
  • -c va extraire vers stdout

Exemple:

$ unzip -q -c commons-lang-2.4.jar META-INF/MANIFEST.MF

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_13-119 (Apple Inc.)
Package: org.Apache.commons.lang
Extension-Name: commons-lang
Specification-Version: 2.4
Specification-Vendor: Apache Software Foundation
Specification-Title: Commons Lang
Implementation-Version: 2.4
Implementation-Vendor: Apache Software Foundation
Implementation-Title: Commons Lang
Implementation-Vendor-Id: org.Apache
X-Compile-Source-JDK: 1.3
X-Compile-Target-JDK: 1.2

Vous pouvez également utiliser -p au lieu de -q -c.

- p extraire les fichiers vers le tube (stdout). Rien que les données du fichier sont envoyées à stdout, et les fichiers sont toujours extraits au format binaire, tout comme ils sont stockés (pas de conversions).

140
miku

utilisez unzip:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF

qui va tranquillement (-q) lire le chemin META-INF/MANIFEST.MF du fichier jar (qui est compressé au format Zip) vers stdout (-c). Vous pouvez ensuite diriger la sortie vers une autre commande pour répondre à des questions telles que "quelle est la classe principale de ce pot:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2

(cela supprime toutes les lignes qui ne contiennent pas la chaîne Main-Class, puis divise la ligne en :, en ne gardant que le deuxième champ, le nom de la classe). Bien sûr, définissez $JARFILE_PATH de manière appropriée ou remplacer $JARFILE_PATH avec le chemin vers un fichier jar qui vous intéresse.

16
Bobby Powers

Selon votre distribution, installez le package unzip. Ensuite, lancez simplement

unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF

Cela videra le contenu sur STDOUT.

HTH

4
Zsolt Botykai

D'autres ont posté sur l'utilisation de la décompression -p et de la tuyauterie pour grep ou awk ou tout ce dont vous avez besoin. Bien que cela fonctionne dans la plupart des cas, il convient de noter qu'en raison de la limite de 72 caractères par ligne de MANIFEST.MF, vous pouvez rechercher des clés dont les valeurs sont réparties sur plusieurs lignes et seront donc très difficiles à analyser. J'adorerais voir un outil CLI qui peut réellement extraire une valeur rendue du fichier.

http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html

1
Justin Clayton

$ tar xfO some.jar META-INF/MANIFEST.MF

x extrait et O redirige vers stdout.

Remarque: Semble fonctionner uniquement dans bsdtar, pas GNU tar.

1
rlovtang