【问题标题】:IntelliJ ctrl-click references a .class file not a .java fileIntelliJ ctrl-click 引用 .class 文件而不是 .java 文件
【发布时间】:2017-06-09 21:07:31
【问题描述】:

我在 .groovy 文件中有以下代码行用于测试:

GenerateShipConfirmsForBatch gscb = new GenerateShipConfirmsForBatch();

按住 Ctrl 键单击 GenerateShipConfirmsForBatch 会将我带到 .jar 中的 GenerateShipConfirmsForBatch.class,而不是 .java 文件,即使我在顶部正确导入了该类。我希望它引用 .java 文件,这样它就会获取我对 .java 文件所做的更改。

任何帮助将不胜感激!

【问题讨论】:

  • 因为你没有下载这个repo的源代码,所以你需要下载源代码。或者 Intellij 会将类文件反编译为源代码(我想你可以在文件顶部看到一个警告)
  • 如果要编辑此代码,GenerateShipConfirmsForBatch.java 文件必须存在于项目的源根目录之一中。
  • 您是否有权访问 .java 文件?
  • 请按照this answer的说明进行操作。

标签: java intellij-idea


【解决方案1】:

第一个猜测 - 错误的导入

在我看来,您所写的内容就像您在 2 个不同的包或导入的项目中拥有同名的类,而不是在可打开的 java 类中。导入类时请注意导入要使用的类。

例如。注解类Service在不同的包中被广泛使用。

import org.springframework.stereotype.Service;
import com.google.web.bindery.requestfactory.shared.Service;

只需检查您是否使用了正确的导入。

第二次猜测 - 错误设置模块

如果您使用的是多模块应用程序,则必须正确设置父项目以正确解决此问题,以及链接应该位于的子项目。

Maven 中使用pom.xml 完成。 Maven - Guide to Working with Multiple Modules 很好地解决了这个问题。

Gradle 中使用 build.gradle 完成。你可以阅读更多关于它的信息Gradle Multi-Module Project Setup


关于类的基础知识

本地类

Idea 优先链接本地 .java 文件而不是 .class,因此如果发生这种情况,我建议重新安装 Idea,因为我找不到正确的方法。

链接类(来自外部库)

如果您已导入外部库,它将链接到 .class,因为它是从 .jar 文件反编译的。

您可以下载.jar 和源代码,如果您使用的是Maven Projects,请点击Download Sources and/or Documentation

【讨论】:

    【解决方案2】:

    仅仅因为您在顶部导入了类并不意味着您可以查看源代码(例如,.java 文件)。如果此类来自pom.xmlbuild.gradle 文件中定义的依赖项,那么您可能无权查看源代码。但是,如果这是您在项目顶层拥有的单独模块,那么您将能够查看.java 文件。如果这个库是开源的,那么我建议将它克隆到您的项目中并将其添加为模块。这将解决您的问题。

    【讨论】:

      【解决方案3】:

      您可以从这里安装 Java Decompiler IntelliJ 插件https://plugins.jetbrains.com/plugin/7100-java-decompiler-intellij-plugin

      它允许您在调试过程中显示所有 Java 源代码,即使您没有全部

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-24
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-07
        • 2016-10-05
        • 2016-12-11
        相关资源
        最近更新 更多