Как я могу извлечь строки, объявленные внутри Java, которые вошли в JAR-файл - PullRequest
3 голосов
/ 28 июля 2011

Существует ли эквивалент команды Unix strings для файлов jar?

Например, если у меня есть этот файл Java:

public class Foo {
    String foo = "I\'m so meta even this acronym";
}

скомпилировано и помещено в панель.jar

В идеале я хотел бы запустить некоторую команду на bar.jar, которая отправит строку «I'm so meta» на стандартный вывод, чтобы я мог выполнить ее для grep.

Проблема, которую я пытаюсь решить, заключается в том, что я получаю сообщение об ошибке в своей Java-программе и мне хотелось бы узнать, из какого jar-файла он поступил.

Ответы [ 4 ]

5 голосов
/ 28 июля 2011

Это должно работать для вас:
unzip -p your.jar |strings| grep 'your string'

Для поиска по нескольким JAR-файлам в каталоге используйте:
unzip -p \*.jar |strings| grep 'your string'

2 голосов
/ 28 июля 2011

Банки - это просто zip-файлы, так что это хорошая отправная точка.

unzip -p myfile.jar | grep "Error message"

, кажется, работает, однако при распаковке могут печататься управляющие символы, что может испортить вашу текущую консоль. Было бы лучше на самом деле разархивировать файлы в каталог и запустить строки на нем. Вероятно, что-то вроде этого будет работать

for file in `ls *.jar`
do
  echo $file
  unzip -ol $file | awk '{ print $4 }' > extracted && cat extracted | xargs strings | grep "ERROR MESSAGE" && cat extracted | xargs rm -rf
done

Могу поспорить, что есть более эффективный способ сделать это, я уверен, что некоторые гуру сценариев помогут мне это исправить

0 голосов
/ 28 июля 2011

Если ваше сообщение об ошибке вызвано как исключение, я бы предложил вам изучить трассировку стека и получить класс и метод, который вызывает исключение.Затем декомпилируйте класс с помощью jad (декомпилятор java) и посмотрите, откуда пришло сообщение.

0 голосов
/ 28 июля 2011

вы можете попробовать команду "nohup" в Unix.здесь все исключения и стандартный вывод будут добавлены в файл

Команда:

nohup java -jar bar.jar > bar.out &

теперь смотрите файл bar.out для сообщений об ошибках в вашем выполнении jar.

...