Java 给定一个目录,如何找出类的位置
假设我有一个满是jar的目录。是否有一个java命令可以输入命令提示符,告诉我可以从哪个JAR加载类?“java命令”(无论是什么命令)通常不会在命令行中输入。不过,您可以尝试一个简单的grep:Java 给定一个目录,如何找出类的位置,java,jar,Java,Jar,假设我有一个满是jar的目录。是否有一个java命令可以输入命令提示符,告诉我可以从哪个JAR加载类?“java命令”(无论是什么命令)通常不会在命令行中输入。不过,您可以尝试一个简单的grep: # grep 'my.super.cool.Stuff' *.jar 理论上,需要对点进行转义,以防止它们与任何字符匹配,但这通常会让您了解类的位置。有一个应用程序可以提供清晰的输出。他们也有来源,他们可能只是在罐子里翻来覆去。看看Sourceforge上的“瑞士文件刀”(http://sourc
# grep 'my.super.cool.Stuff' *.jar
理论上,需要对点进行转义,以防止它们与任何字符匹配,但这通常会让您了解类的位置。有一个应用程序可以提供清晰的输出。他们也有来源,他们可能只是在罐子里翻来覆去。看看Sourceforge上的“瑞士文件刀”(http://sourceforge.net/projects/swissfileknife/). 要搜索名为QueryParameter的类,请使用
>sfk larc -dir "*.jar" +filter -+QueryParameter
gwt\gwt-dev.jar\\org\apache\xalan\lib\sql\QueryParameter.class
JAR文件在双反斜杠之前提到,JAR中的路径在双反斜杠之后
一旦您习惯了SFK的紧凑语法,您将在很多很多事情上使用它。grep、find等的绝佳伴侣。如果您想知道类在运行时何时何地加载到JVM,可以使用“java”命令上的
-verbose:class
选项。可能是这样的:
findclass.sh
#!/bin/sh
if [ 2 != $# ] ; then
echo "Usage: $0 directory class"
exit 1
fi
for i in $1/*.jar; do
if unzip -l $i | grep -q "$2.class"; then
echo "Found $2 in $i"
fi
done
当选择的答案有效时,我实际上是想弄清楚类是从哪里加载的。对于Java专业人士来说,这可能是最基本的,但对于那些不知道的人来说,我刚刚发现了一个技巧。使用-verbose标志运行java,它将在每次加载类时以及从何处输出到标准输出!