2011-05-19 32 views
5

是否有任何工具可以提供類路徑或文件夾,並且將搜索所有.jar文件以查找對特定類的引用?用於查找Java罐中所有依賴項的工具

它會救了我一天的搜索,以解決this kind of problem

在我的情況下,我不得不找出一個流氓引用來自哪裏,因爲它阻止了JBoss由於NoClassDefFoundError而正確啓動。我想我正在尋找:

java -jar magicbullet.jar /path/to/search com.myproject.DodgyClass 
Searching... 
com.problematic.Otherclass in /path/to/search/dodgy.jar implements com.myproject.DodgyClass 

或類似的。如果不是,我會寫一個。

+0

請參閱[Java class finder tool](http://stackoverflow.com/questions/5577543/java-class-finder-tool) – wjans 2011-05-19 11:44:34

+0

The我讀了更多,我理解得越少。你的問題是什麼?你只想找到某個班級所在的罐子,或者你想知道是誰在參考某個班級? – Kaj 2011-05-19 13:57:33

+0

在我的情況下,我想找到哪個jar引用特定的其他類的哪個類。我花了很多時間試圖找出NoClassDefError來自哪裏,最終發現其中一個jar中的一個類實現了一個不在類路徑中的接口。 JBoss的錯誤信息不是很有幫助。像我正在尋找的工具可以很快找到。 – Rich 2011-05-19 20:53:23

回答

3

使用Tattletale - 。它可以幫助你創建一個非常方便的索引來搜索類。

+0

看起來像一個很酷的工具,但看不到它回答了「哪些類引用了類X」的問題 – Kaj 2011-05-19 13:41:23

+0

Tattletale絕對給出了「哪些類引用類X」的答案以及「哪些類X依賴於」。它也提供了jar文件之間的依賴關係。進一步它告訴你有關傳遞依賴和循環依賴。我發現最有用的報告是'類位置',它可以幫助解決類路徑問題,如果一個類從錯誤的jar版本加載的話。 – sinha 2011-05-19 17:45:49

3

在Linux(或Windows上的Cygwin)下,你可以使用https://gist.github.com/980697的腳本。

用法:findclass.sh <directory> <className>

實施例:findclass.sh . ClassName(是指「搜索名爲類名所有罐子/戰爭/耳朵內部類/ SARS位於當前目錄和所有的子目錄內」)

+0

這不會告訴一個類是否引用另一個類。 – Kaj 2011-05-19 13:21:29

+0

但它會告訴你失蹤的班級在哪裏。因此,NoClassDefFoundError可以通過向運行時類路徑添加額外的jar(或通過用正確的jar替換錯誤的jar)來解決。 – 2011-05-19 13:47:39

0

谷歌「JarAnalyzer」一個有用的工具,更正確地做你想要的東西(以及更多; D)