Eclipse - 查找没有附加源的库的 Java 引用

Posted

技术标签:

【中文标题】Eclipse - 查找没有附加源的库的 Java 引用【英文标题】:Eclipse - Find Java references of a library without attached sources 【发布时间】:2014-02-09 17:30:24 【问题描述】:

环境

我有一个简单的 test-foo.jar 库,只有两个文件:

接口Foo与单一方法void doStuff() class Bar 使用单个方法void executeFoo(Foo foo),它只调用foo.doStuff()

然后我有一个 Eclipse Java 项目,它有一个类 FooImpl,它实现了 Foo。这个项目有test-foo.jar 作为构建路径条目。我没有附加此 JAR 的源代码。

问题

现在让我说我有点好奇到底是谁调用了doStuff() 方法。所以我点击FooImpl#doStuff签名并按下Ctrl+Shift+G(查找参考资料)。我希望在搜索结果中看到Bar#executeFoo,但结果实际上是空的。

问题

我有点困惑,因为我认为这在 Eclipse 中有效(现在已经使用 Eclipse 超过几年了)。但它似乎只适用于附有源代码的库(我之前没有注意到)。

有没有办法在没有附加源的情况下在项目库中查找类型(或方法)的引用(或用法)? 为什么 Eclipse 不索引并显示来自.class 文件的引用?


其他信息

只要我将源代码附加到 JAR,查找参考就可以了。 我很想知道为什么 Eclipse JDT 开发人员决定不索引搜索.class没有来源。 请注意,即使我没有源代码,谁在调用我的方法也是非常有用的信息。 在我看来,Eclipse is indexing method references 在 .class 文件中。 顺便说一下,NetBeans “不起作用”;)。

【问题讨论】:

可能重复? ***.com/questions/5268998/… @MikeKoch nope... 该问题中的 OP 不了解 Find References 功能。调用层次结构只是方法引用的不同视图。我知道(至少我认为我知道:))如何搜索参考资料。如果库没有附加源,它就不起作用。 如果 bar 没有引用 fooImpl.doStuff(),而是引用 foo.doStuff(),那么它将不匹配对 fooImpl.doStuff() 方法的引用的搜索。 只是为了好奇,你有没有试过在eclipse上安装一个Java反编译器看看是否有帮助? @EvertonAgner 有帮助,但在生成源文件之前至少需要打开一个源类。但是,我对 JAD 和 JD 插件的体验都非常糟糕,因为它们通常会导致 SEGFAULT(或类似的致命问题)杀死 Eclipse。 【参考方案1】:

您需要将源附加到您的库中。 Eclipse 没有必要将您带到 .class 文件,因为您所看到的只是一堆已编译的 jamble-wamble(这只是我想出的一个词)。 Eclipse 只会导航到 Java 源文件。

【讨论】:

你知道为什么会这样吗?是否有任何与此或任何其他官方参考相关的邮件列表讨论?对我来说,了解调用我的接口的组件仍然非常有用。 不,我没有官方参考,它就是这样。为什么需要知道组件?找到后打算做什么? 我需要对几个组件进行逆向工程。仅仅知道创建特定对象实例的组件将具有很大的价值。如果没有这个,我需要手动反编译所有 JAR 并附加源文件,然后搜索参考。 这就是您所要求的功能不存在的原因。 Eclipse 不能帮助您对 JAR 进行逆向工程或反编译。在大多数情况下,您尝试做的事情甚至是不道德的。 我知道在将 Java 与一些闭源第三方库一起使用时,您可能从未遇到过任何集成问题;)。或者,当您需要在官方文档几乎不存在且 Google 返回的结果正好为 0 的情况下实现附加功能时。试图理解某事是如何运作的没有什么不道德的。

以上是关于Eclipse - 查找没有附加源的库的 Java 引用的主要内容,如果未能解决你的问题,请参考以下文章

启动使用附加库的可执行程序

打印定义给定符号的库的名称

如何在eclipse中指定链接时使用的库版本?

eclipse 调试器:附加 Maven 依赖项的源代码?

如何在 eclipse kepler 中查看 JavaFX SDK 的源代码?

Eclipse maven没有添加依赖项