Muszę przeczytać plik manifestu MANIFEST.MF maven z „some.jar” przy użyciu bash
bash
jar
manifest.mf
rzymski
źródło
źródło
Odpowiedzi:
-q
pominie szczegółowe dane wyjściowe z programu rozpakującego-c
wypakuje na stdoutPrzykład:
Alternatywnie możesz użyć
-p
zamiast-q -c
.źródło
zastosowanie
unzip
:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
który po cichu (
-q
) odczyta ścieżkę META-INF / MANIFEST.MF z pliku jarfile (który jest skompresowany przy użyciu formatu zip) do stdout (-c
). Następnie możesz przesłać dane wyjściowe do innego polecenia, aby odpowiedzieć na pytania typu `` jaka jest główna klasa tego pliku jar:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2
(To usuwa wszystkie linie, które nie zawierają łańcucha
Main-Class
, a następnie dzieli linię na:
, pozostawiając tylko drugie pole, nazwę klasy). Oczywiście albo$JARFILE_PATH
odpowiednio zdefiniuj, albo zastąp$JARFILE_PATH
ścieżką prowadzącą do łobuza, którym jesteś zainteresowany.źródło
W zależności od dystrybucji zainstaluj
unzip
pakiet. Następnie po prostu wystawSpowoduje to zrzucenie zawartości do STDOUT.
HTH
źródło
Inni piszą o używaniu unzip -p i pipingu do grep, awk lub czegokolwiek, czego potrzebujesz. Chociaż działa to w większości przypadków, warto zauważyć, że ze względu na limit 72 znaków w linii w MANIFEST.MF, możesz wyszukiwać klucze, których wartości są podzielone na wiele wierszy i dlatego będą bardzo trudne do przeanalizowania. Chciałbym zobaczyć narzędzie CLI, które może faktycznie wyciągnąć renderowaną wartość z pliku.
http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html
źródło
$ tar xfO some.jar META-INF/MANIFEST.MF
x
wypakowuje iO
przekierowuje na standardowe wyjście.Uwaga: Wydaje się, że działa tylko w bsdtar, a nie w GNU tar.
źródło
Poniższy skrypt Groovy wykorzystuje API Java do analizowania manifestu, unikając problemów z dziwnym łamaniem linii w formacie manifestu:
#!/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") } }
Przekaż pliki JAR jako argumenty:
Lub jeśli desperacko szukasz jednej linijki:
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
źródło