Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给定一个目录,如何找出类的位置_Java_Jar - Fatal编程技术网

Java 给定一个目录,如何找出类的位置

Java 给定一个目录,如何找出类的位置,java,jar,Java,Jar,假设我有一个满是jar的目录。是否有一个java命令可以输入命令提示符,告诉我可以从哪个JAR加载类?“java命令”(无论是什么命令)通常不会在命令行中输入。不过,您可以尝试一个简单的grep: # grep 'my.super.cool.Stuff' *.jar 理论上,需要对点进行转义,以防止它们与任何字符匹配,但这通常会让您了解类的位置。有一个应用程序可以提供清晰的输出。他们也有来源,他们可能只是在罐子里翻来覆去。看看Sourceforge上的“瑞士文件刀”(http://sourc

假设我有一个满是jar的目录。是否有一个java命令可以输入命令提示符,告诉我可以从哪个JAR加载类?

“java命令”(无论是什么命令)通常不会在命令行中输入。不过,您可以尝试一个简单的grep:

 # 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,它将在每次加载类时以及从何处输出到标准输出!