如何让对象/类告诉我它来自哪个jar文件

时间:2010-01-04 14:27:22

标签: java eclipse reflection

在Eclipse中,正在加载一个不可能的类。在调试模式下,我可以暂停它并看到对类a.b.c的调用但是a.b.c类应该存在于任何地方,因为它已被重命名。我的假设是有一个旧的jar文件被调用...但我找不到它。那么在eclipse中如何在调试模式下找到a.b.c类所在的jar文件?通过eclipse菜单选项或通过Java并使用反射来让对象告诉我自己的jar文件。

感谢。

7 个答案:

答案 0 :(得分:5)

您可以使用类加载器来检索资源的URL。这也适用于类。获取java.lang.String类的位置:

X.class.getClassLoader().getResource("java/lang/String.class");

输出:

jar:file:/C:/Program%20Files/Java/jdk1.6.0_17/jre/lib/rt.jar!/java/lang/String.class

答案 1 :(得分:3)

如果使用-verbose:class启动JVM(您可以将其设置为Eclipse中的JVM选项),您可以确切地看到正在加载哪些类,我想从哪里开始。

答案 2 :(得分:2)

虽然您已删除或重命名了源代码,但在许多情况下,编译的.class文件仍可供Eclipse(及其JVM)使用。

为了确保这不是愚弄你,你可以在Eclipse中运行Project|Clean或者只需进入Navigator视图并删除你的classes目录(标准是bin),然后让Eclipse重新建立它。

答案 3 :(得分:1)

你能“F3”(开课)吗?即使它没有反编译它也应该显示jar文件。

答案 4 :(得分:1)

如果某处有旧罐子,您可以通过指定要查找的班级,让 JAR Class Finder 找到它。
它是一个独立的(即不涉及一些额外的代码)方式来找到那个罐子。

alt text

答案 5 :(得分:1)

您还可以使用“打开类型”对话框(Ctrl+Shift+T)。输入类的名称,如果Eclipse找到它,它将显示它来自的jar。

但请注意,Eclipse看到的类路径不一定与运行时类路径相同。

答案 6 :(得分:0)

感谢您的帮助,Thomas Jung的解决方案是:

X.class.getClassLoader()的getResource( “爪哇/郎/ String.class”);