J'ai besoin de lire le fichier manifeste MANIFEST.MF maven à partir de "some.jar" en utilisant bash
bash
jar
manifest.mf
romain
la source
la source
Réponses:
-q
supprimera la sortie détaillée du programme de décompression-c
va extraire vers stdoutExemple:
Vous pouvez également utiliser à la
-p
place de-q -c
.la source
utiliser
unzip
:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
qui
-q
lira tranquillement ( ) le chemin META-INF / MANIFEST.MF depuis le 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 pour ce fichier jar:$ 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-le$JARFILE_PATH
correctement ou remplacez-le$JARFILE_PATH
par le chemin vers un fichier jar qui vous intéresse.la source
En fonction de votre distribution, installez le
unzip
package. Puis émettez simplementCela videra le contenu dans STDOUT.
HTH
la source
D'autres ont publié des articles sur l'utilisation de unzip -p et du piping vers 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 être à la recherche de clés dont les valeurs sont réparties sur plusieurs lignes et seront donc très difficiles à analyser. J'aimerais 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
la source
$ tar xfO some.jar META-INF/MANIFEST.MF
x
extrait etO
redirige vers stdout.Remarque: semble fonctionner uniquement dans bsdtar, pas GNU tar.
la source
Le script Groovy suivant utilise l'API de Java pour analyser le manifeste, évitant ainsi les problèmes avec les sauts de ligne étranges du format du manifeste:
#!/usr/bin/env groovy for (arg in args) { println("[$arg]") jarPath = new java.io.File(arg).getAbsolutePath() jarURL = new java.net.URL("jar:file:" + jarPath + "!/") m = jarURL.openConnection().getManifest() m.getMainAttributes().each { k, v -> println("$k = $v") } }
Transmettez les fichiers JAR comme arguments:
Ou si vous êtes désespéré pour un one-liner:
groovy -e 'new java.net.URL("jar:file:" + new java.io.File(args[0]).getAbsolutePath() + "!/").openConnection().getManifest().getMainAttributes().each { k, v -> println("$k = $v") }' ~/.m2/repository/junit/junit/4.13/junit-4.13.jar
la source