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

11

当我使用 Ctrl + 右键单击打开特定的类时,应该会跳转到包含所有行和适当注释的Java源代码窗口。但实际上,我得到的是反编译的.class文件窗口。

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

如果我将http://docs.oracle.com/javase/8/docs/api 添加到项目结构-> SDK->文档路径中,我可以获得类或方法的概述,但仍然无法打开正确的源文件。

有什么想法吗?


我认为你看到的不是反编译的类文件,而是占位符。我认为你需要附加源代码。在IntelliJ中,Maven项目会自动执行此操作。 - Tim Biegeleisen
Maven的“自动下载”源代码/文档都已勾选。 - Lucian
2个回答

16

在导航到源代码时,IDEA会首先查找已连接的源代码。如果未找到,则会对类进行反编译并显示它。

尝试以下故障排除步骤以追踪问题:

1. 确保源代码已正确连接。

对于库,请打开项目结构对话框(Ctrl+Alt+Shift+S;),并在“项目设置”下的左侧选择“库”。找到相关的库,然后选择它。如果源代码已连接,它将显示出来。你说你已经检查了Maven的“自动下载”源代码/文档。因此,对于任何具有可用源代码的Maven库,都应列出它。

enter image description here

如果未列出或呈红色,则从Maven工具窗口运行“下载源代码”或“下载源代码和文档”enter image description here。如果源代码仍处于红色状态,则很可能是Maven存储库中该构件不可用。请使用Maven Search来验证。

对于JDK,请在项目结构对话框中选择“SDK”,找到JDK,然后选择“源代码路径”选项卡。确保列表中包含{jdk-home}/src.zip文件。

enter image description here

当你添加JDK时,IDEA应自动设置此选项,但如果没有,请添加它。

2. 确保源JAR/ZIP文件未被损坏

在资源管理器/查找器中导航到归档文件并确保它可以被打开和查看。

3. 刷新IDEA的缓存

有可能IDEA的缓存或索引已经损坏。因此,IDEA无法“看到”类与源代码之间的链接关系。前往文件 > 无效化缓存/重新启动...。无效化缓存并重启IDEA。等待IDEA完成重新索引项目和库(观察IDEA窗口右下角的进度)。

以上其中一个步骤应该可以解决此问题。

另外需要注意,如果您不想让IDEA反编译代码(作为没有源码备份的情况下的备用方案),据我所知(基于其帮助页面),唯一的方法就是在插件列表中禁用“Java字节码反编译器”。


2
在我的情况下,步骤2是问题所在。感谢您详细的回答。 - Lucian
2
令人惊讶的是,在Ubuntu中,openjdk源代码被分发为单独的软件包,即openjdk-8-source。第一步确实有助于解决此类问题。 - miracle_the_V
1
这对我很有帮助,特别是第一步。以防万一有人找不到src.zip,以下是如何在Ubuntu上添加它的方法:sudo apt-get install openjdk-8-source。 还有Ubuntu论坛的链接: https://askubuntu.com/questions/755853/how-to-install-jdk-sources - Andriy Zhuk

0

确保我的源代码已经连接,检查源代码ZIP文件,清除IntelliJ缓存并重新启动后,我仍然遇到了同样的问题。

为了解决这个问题,我创建了一个新项目文件>新建>从现有源代码创建项目...,当我到达库选择步骤时,我取消了自己模块的.jars选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接