IntelliJ 显示反编译的 .class 文件而不是源代码
Posted
技术标签:
【中文标题】IntelliJ 显示反编译的 .class 文件而不是源代码【英文标题】:IntelliJ shows decompiled .class file instead of source code 【发布时间】:2018-09-08 12:37:34 【问题描述】:我在使用 IntelliJ 时遇到问题 - 如果我 ctrl+单击该类,它会显示该类的“反编译”版本而不是其源代码。
这是我看到的:
我正在尝试打开常规的 JDK 源文件。
我发现的最相关的问题在这里解释:Java sources replaced by decompiled files in Intellij
到目前为止我找到的最详细的答案也在那里。
但它对我不起作用:
字节码查看器插件已关闭。
Java Bytecode Decompiler 插件已关闭。
Platform、Project 和 Module 都具有相同的 JDK 版本设置。
我在 IntelliJ 中有两个可用的 JDK:jdk1.8.0_161 和 jbsdk8u112b287.2_windows_x86(与 IntelliJ 捆绑在一起,但没有 src.zip)。两者都试过(必须为 jbsdk8u112b287.2_windows_x86 指定 jdk1.8.0_161 的 src.zip)- 不走运
src.zip 没有损坏 - 我可以通过 WinRAR 打开它
将 jdk1.8.0_161 添加到 IntelliJ 时,会自动找到 src.zip。当手动将 src.zip 添加到 jbsdk8u112b287.2_windows_x86 源路径选项卡时 - 它开始“扫描根目录”,但警告我它“无法确定所选项目包含哪种文件”并让我“将它们附加为‘源’”所以我同意了。
Tried File > Invalidate Caches / Restart... - 结果相同。
2017.3 和新的 IntelliJ 2018.1 版本中的相同问题。
为文档提供路径使 IntelliJ 在指定路径中查找文档。所以它对两个 JDK 都适用。但不适用于来源。
其他一切工作/编译正常。
我的设置:
【问题讨论】:
项目/模块中使用了 2 个配置的 JDK 中的哪一个?它有附加的来源吗?尝试删除第二个 JDK 配置。 感谢您的回复。我在项目/模块中与它们保持一致的同时尝试了这两个 jdks,但没有运气。刚刚删除捆绑的jdk,缓存无效,重新启动。问题仍然存在。现在我有两台机器可以比较。两者都有相同的新 IDE 版本。两者都运行 32 位版本的 Intellij。两者都安装了相同且唯一的 jdk 版本(jdk1.8.0_161)。两者都有相同的设置(通过设置存储库同步)。在第二台机器上一切正常!创建新项目时的行为相同。我什至不知道现在该尝试什么...... 尝试删除 IDE 配置 (intellij-support.jetbrains.com/hc/articles/206544519),然后在不导入设置的情况下从头开始设置所有内容。 好的,看来问题出在项目本身。删除设置可以解决问题,直到我打开项目。然后我收到这条反编译消息,要求同意某些条件,然后它开始再次向我显示反编译的代码版本。不得不重新导入它而不是重新打开 不幸的是,它仍然不时发生。现在在我的 android Studio 项目中.. 懒得反击.. 如上所述尝试删除设置并重新导入您的项目 【参考方案1】:1。获取源文件
确保你已经下载并安装了JDK的源文件。
我在 Arch Linux 上并使用 pacman -S openjdk8-src
安装它们,这会将 src.zip
放入 /usr/lib/jvm/java-8-openjdk/
。我们将在下一步中使用该 zip 文件。
要列出不同JDK版本的源码包,请pacman -Ss "openjdk.*-src"
。
请参阅this question,了解如何获取特定平台的源文件。
2。将 IntelliJ 指向源文件
在“Platform Settings”→“SDKs”→“Sourcepath”下的模块设置(使用 F4 打开)中,将包含 JDK 源的 zip 文件添加到您的项目 JDK(请务必如果 IntelliJ 列出了多个 JDK,则选择正确的 JDK)使用带有加号的按钮:
3。跳转到源码
使用 IntelliJ 的 Search Everywhere 或 Ctrl+b 选择一个 JDK 类,例如 Comparator
,并将光标放在类的名称上。
【讨论】:
【参考方案2】:如果您在一个 maven 项目中,请确保在项目结构中所有编译的文件夹都在排除部分中。
【讨论】:
与包含 JDK 的源文件无关。【参考方案3】:我遇到了同样的问题,最后在我将 JDK 复制到另一个文件夹并在 IntelliJ 中更改配置后它就消失了。我想可能是因为之前路径中有空格,因为它安装在“Program Files”文件夹下。
【讨论】:
【参考方案4】:这对我有用:
确保选择“项目文件”选项(而不是例如“项目”)。
【讨论】:
离基地很远。与 IntelliJ 无法访问 JDK 源文件完全无关。【参考方案5】:我也有同样的问题。我的问题是Project SDK
设置为13 [Invalid]
。之后我可以Project SDK
到一个有效的SDK。我的问题解决了。
【讨论】:
【参考方案6】:要下载属于jar的类文件的源代码,您可以使用反编译的类文件右上角的下载源选项。
【讨论】:
根据我的经验,这不适用于 JDK,仅适用于 maven 依赖项。而且,对于那些,特别是,您可以将 IntelliJ 设置为始终下载 maven 源代码。【参考方案7】:为此,我尝试了其他地方提到的所有方法,但最后我犯了一个愚蠢的错误。 Intellij 指向没有源代码的 JDK 11(我同时拥有 SDK 8 和 11)。我删除了 JDK 11 并指向 JDK 8。JDK 有源代码,因此现在我可以在 ctrl 单击上看到源代码。另外,我禁用了字节码查看器和反编译器插件。希望这对某人有所帮助。
【讨论】:
禁用字节码查看器和反编译器插件对我有用,因为我已经尝试了其他所有方法。谢谢!【参考方案8】:-
我建议使用 Linux 而不是 windows。很容易找到和下载 Java。
如果你使用Linux,你可以download SDKMAN
Install Java 来自 SDKMAN
# find version
$ sdk list java
# download
$ sdk install java x.y.z-amzn
ctrl+alt+shift+s
添加JDK
切换项目JDK
【讨论】:
【参考方案9】:这也发生在大文件上 - IDEA 决定在索引源时反编译它们,这可能需要很长时间。 如果您愿意接受提款,请在 Help | 中添加以下内容编辑自定义属性可能会解决问题:
idea.max.intellisense.filesize=4096
【讨论】:
【参考方案10】:如果您使用的是 maven ,请右键单击项目资源管理器 -> 选择 Maven -> 小鸡“重新加载项目”
【讨论】:
这永远不会拉入 JDK 源文件。【参考方案11】:在我的 Windows 10 上,展开 maven:
【讨论】:
这仅适用于依赖项,不适用于 JDK 源代码。【参考方案12】:在ubuntu上,当我更改为“Oracle Java”时,有java版本“OpenJDK”,错误消失了,javadoc返回了
【讨论】:
以上是关于IntelliJ 显示反编译的 .class 文件而不是源代码的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse中安装反编译工具Fernflower(Enhanced Class Decompiler)