2012-02-14 60 views
1

請考慮我有一個滿是罐子的目錄。有沒有一個java命令可以輸入到命令提示符中,它會告訴我哪個jar可以加載一個類?給定一個目錄,我如何找出一個類是

+0

雖然所選答案的作品,我其實是試圖找出其中的一類得到了來自加載。對於Java專業人員來說,這可能看起來很基本,但對於那些不知道這裏是我剛發現的提示的人來說。使用-verbose標誌運行java,每次加載類時都會輸出到標準輸出,並從哪裏輸出! – 2012-02-14 19:38:58

回答

2

「Java命令」(無論它們可能是什麼)通常不會在命令行上輸入。你可以嘗試一個簡單的grep,雖然:

# grep 'my.super.cool.Stuff' *.jar 

理論上需要進行轉義點,以防止它們匹配任何字符,但是這通常會給你一個想法,其中一個類的位置。

+0

我可能只是這樣做。 – 2012-02-14 19:22:46

+1

這很有效。奇怪的是,當我逃離這些點不匹配。 – 2012-02-14 19:31:00

1

有一個這樣的應用程序,FindClass,可以提供乾淨的輸出。他們也有源頭,他們可能只是通過罐子gre gre。

0

查看Sourceforge上的「Swiss File Knife」(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,等等。

0

如果您想知道在何時何處將類加載到JVM 的運行時中,可以使用「java」命令中的-verbose:class選項。

0

可能是這樣的:

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 
相關問題