是否有相当于jar文件的Unix strings
命令?
举个例子,如果我有这个Java文件:
public class Foo {
String foo = "I\'m so meta even this acronym";
}
编译并放入bar.jar
理想情况下,我会在bar.jar上运行一些命令,它会将字符串“I is so meta”发送到标准输出,这样我就可以了。
我想解决的问题是,我在Java程序中收到一条错误消息,我想知道它来自哪个jar文件。
答案 0 :(得分:5)
这对你有用:
unzip -p your.jar |strings| grep 'your string'
要搜索目录中的多个JAR文件,请使用:
unzip -p \*.jar |strings| grep 'your string'
答案 1 :(得分:2)
Jars只是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
我敢打赌,有一种更有效的方法可以做到这一点,一些shell脚本专家会为我清理这一点我敢肯定。
答案 2 :(得分:0)
如果您的错误消息被抛出异常,我建议您检查堆栈跟踪并获取抛出异常的类和方法。然后使用jad(java反编译器)反编译该类,并查看消息的来源。
答案 3 :(得分:-2)
你可以在Unix中尝试“nohup”命令。这里所有异常和标准输出都将附加到文件中
命令是
nohup java -jar bar.jar > bar.out &
现在看到文件bar.out中的jar执行中的错误消息。