有没有一种方法可以确定哪些类在运行时从哪些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