Java 源代码被 Intellij 中的反编译文件替换

Posted

技术标签:

【中文标题】Java 源代码被 Intellij 中的反编译文件替换【英文标题】:Java sources replaced by decompiled files in Intellij 【发布时间】:2016-11-19 15:27:39 【问题描述】:

当我使用 ctrl + 右键单击​​ 打开一个特定的类时,我应该被重定向到一个带有 java 源代码的窗口,其中包含所有行和适当的 cmets。但相反,我得到了一个带有反编译的 .class 文件的窗口。

我尝试停用反编译器插件,但它不起作用。

如果我将 http://docs.oracle.com/javase/8/docs/api 添加到项目结构 -> SDKs -> 文档路径,我可以大致了解我正在滚动的类或方法,但仍然无法打开正确的源文件。

有什么想法吗?

【问题讨论】:

我认为您看到的不是反编译的类文件,而是占位符。我认为您需要附加来源。 IntelliJ 中的 Maven 项目自动执行此操作 AFAIK。 Maven 的“自动下载”源/文档都被检查了 【参考方案1】:

导航到源时,IDEA 将首先转到附加的源。如果不存在,它将反编译该类并显示它。

尝试以下故障排除方法来追踪问题:

1.确保源已正确连接。

对于库,打开项目结构对话框(Ctrl+Alt+Shift+S;) 和左侧“项目设置”下的 sel4ct “库”。找到有问题的库,然后选择它。它将显示源是否已附加。您提到您已经检查了 Maven 的“自动下载”源/文档。因此,对于任何具有可用源的 maven 库,都应该列出它。

如果未列出或显示为红色,请从 Maven 工具窗口运行“下载源代码”或“下载源代码和文档”。如果源是红色的,这可能意味着它不适用于 maven 存储库中的该工件。使用Maven Search 进行验证。

对于 JDK,在 Project Structure 对话框中选择“SDKs”,找到 JDK,然后选择“Sourcepath”选项卡。确保列出了 jdk-home/src.zip 文件。

IDEA 应该会在你添加 JDK 的时候自动设置这个,如果没有,添加它。

2。确保源 JAR/ZIP 文件没有损坏

导航到资源管理器/查找器中的存档并确保它可以打开和查看。

3。刷新 IDEA 的缓存

IDEA 的缓存/索引可能已损坏。因此,IDEA 并没有“看到”类和源代码之间的联系。转到 File > Invalidate Caches / Restart..."。使缓存无效并重新启动 IDEA。等待 IDEA 完成对项目和库的重新索引(观察 IDEA 右下角的进度窗口)。

上述方法之一应该可以解决问题。

仅供参考,如果您不希望 IDEA 反编译代码(作为不存在源的备份),据我所知(并基于 its help page),这样做的唯一方法是禁用插件列表中的“Java Bytecode Decompiler”。

【讨论】:

第 2 步是我的问题。感谢您的详细回答。 令人惊讶的是,openjdk 源代码在 Ubuntu 中作为单独的包分发,即 openjdk-8-source。第一步确实有助于解决此类问题。 这对我有帮助。特别是第 1 步。万一有人找不到 src.zip,这里是如何在 Ubuntu 上添加它:sudo apt-get install openjdk-8-source。以及 ubuntu 论坛的链接:askubuntu.com/questions/755853/how-to-install-jdk-sources【参考方案2】:

在确保我的源已附加,检查源 ZIP,使 IntelliJ 缓存无效并重新启动后,我仍然遇到同样的问题。

为了解决这个问题,我重新创建了项目File > New > Project From Existing Sources...,当我进入库选择步骤时,我为我自己的模块取消选择.jars

【讨论】:

以上是关于Java 源代码被 Intellij 中的反编译文件替换的主要内容,如果未能解决你的问题,请参考以下文章

spark 关联source

JD-GUI反编译jar包为Java源代码

如何在intellij idea中启用从源到外部库的滚动?

为啥将class反编译为java后,java直接编译时有错误

谁能帮我把一个hex文件反编译为c语言文件?

下载 PyCharm,现在 Java 在 IntelliJ 中被破坏