有沒有一種方法可以確定哪些類在運行時從哪些jar加載?如何研究從哪個JAR加載哪些類?
我確定我們以前都在JAR地獄。我已經解決了這個問題,在項目上排查了ClassNotFoundException
s和NoClassDefFoundError
。我想避免在jar中找到所有類的實例,並使用代碼中的淘汰過程導致CNFE找到罪魁禍首。
任何分析或管理工具是否會爲您提供此類信息?
這個問題純粹是因爲我們應該在類加載的時候有這個信息。必須有一種方法可以找到它,或者記錄它並找到它,但我知道沒有什麼能做到這一點,是嗎?
我知道OSGi和版本化捆綁包/模塊旨在使這是一個非問題...但它似乎不會很快消失。 :)
注意:我發現這question是我的問題的一個子集,涉及從版本化的罐子加載的類。
更新:有點相關,這篇文章解釋了一種策略來搜索罐子(在當前目錄下)或M2_REPO中的類。 JarScan, scan all JAR files in all subfolders for specific class
更新2:也有點關係,JBoss Tattletale
傑森一天都有它的權利,這基本上是一個問題的副本,我問不是很久以前。 http://stackoverflow.com/questions/779650/where-on-the-file-system-was-my-java-class-loaded-from – shsteimer 2009-06-03 21:35:44