在Eclipse中,正在加载一个不可能的类。在调试模式下,我可以暂停它并看到对类a.b.c的调用但是a.b.c类应该存在于任何地方,因为它已被重命名。我的假设是有一个旧的jar文件被调用...但我找不到它。那么在eclipse中如何在调试模式下找到a.b.c类所在的jar文件?通过eclipse菜单选项或通过Java并使用反射来让对象告诉我自己的jar文件。
感谢。
答案 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 找到它。
它是一个独立的(即不涉及一些额外的代码)方式来找到那个罐子。
答案 5 :(得分:1)
您还可以使用“打开类型”对话框(Ctrl+Shift+T
)。输入类的名称,如果Eclipse找到它,它将显示它来自的jar。
但请注意,Eclipse看到的类路径不一定与运行时类路径相同。
答案 6 :(得分:0)
感谢您的帮助,Thomas Jung的解决方案是:
X.class.getClassLoader()的getResource( “爪哇/郎/ String.class”);