Мне нужно прочитать файл манифеста maven MANIFEST.MF из "some.jar" с помощью bash
bash
jar
manifest.mf
Римский
источник
источник
Ответы:
-q
подавит подробный вывод из распакованной программы-c
будет извлечен в стандартный выводПример:
В качестве альтернативы вы можете использовать
-p
вместо-q -c
.источник
использование
unzip
:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
который незаметно (
-q
) прочитает путь META-INF / MANIFEST.MF из jarfile (сжатого с использованием формата zip) в stdout (-c
). Затем вы можете передать вывод другой команде, чтобы ответить на такие вопросы, как «какой основной класс для этой банки:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2
(это удаляет все строки, которые не содержат строку
Main-Class
, затем разделяет строку на:
, сохраняя только второе поле, имя класса). Конечно, либо определите$JARFILE_PATH
надлежащим образом, либо замените$JARFILE_PATH
на путь к интересующему вас jar-файлу.источник
В зависимости от вашего дистрибутива установите
unzip
пакет. Тогда просто выдайтеЭто сбрасывает содержимое в STDOUT.
HTH
источник
Другие писали об использовании unzip -p и piping для grep или awk или чего-то еще, что вам нужно. Хотя это работает в большинстве случаев, стоит отметить, что из-за ограничения в 72 символа на строку для MANIFEST.MF вы можете искать ключи, значения которых разделены на несколько строк и поэтому их будет очень сложно проанализировать. Мне бы хотелось увидеть инструмент CLI, который действительно может извлекать визуализированное значение из файла.
http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html
источник
$ tar xfO some.jar META-INF/MANIFEST.MF
x
извлекает иO
перенаправляет на стандартный вывод.Примечание: похоже, работает только в bsdtar, а не в GNU tar.
источник
Следующий скрипт Groovy использует API Java для анализа манифеста, избегая проблем со странным разрывом строк в формате манифеста:
#!/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") } }
Передайте файлы JAR в качестве аргументов:
Или, если вам отчаянно нужен однострочный текст:
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
источник