【问题标题】:Getting "cannot find Symbol" in Java project in IntelliJ在 IntelliJ 的 Java 项目中获取“找不到符号”
【发布时间】:2022-04-29 11:06:57
【问题描述】:

我从 GameManager.java 类中调用一个静态单例实例。

HUD.getInstance().update(timeDelta);

HUD.java 包含HUD 类以及另外两个相关的类HUDTextElementHUDElement。所有的类都在同一个根路径../src/org/mypackage

但是,当在 IntelliJ 中编译此项目时,我在拨打HUD.getInstance() 电话的那一行得到找不到符号 HUD

这个完全相同的代码在 Eclipse 中编译得很好,知道问题是什么吗?

【问题讨论】:

标签: java intellij-idea


【解决方案1】:

选择 Build->Rebuild Project 会解决的

【讨论】:

  • Java/IntelliJ 新手注意事项:以上与“构建项目”不同
  • @JustinHill - 我精通 eclipse 和 IntelliJ 新手。您能否帮助我了解两者之间的区别以及任何可以帮助我解决 IntellJ 时间的点/链接。
  • 我可能是比谷歌搜索更糟糕的资源,我没有使用过 Eclipse。我的评论只是“重建项目”和“构建项目”是不同的选项(我正在帮助遇到这个问题的人,他们没有注意到选项之间的区别)
  • 为什么会这样?使缓存无效并重新启动甚至都不起作用。
  • 工作.... 尝试运行“maven clean compile”,但这并没有解决问题
【解决方案2】:

我遇到了同样的问题并通过单击文件>使缓存无效/重新启动来修复它

【讨论】:

  • 当心 - 如果您碰巧有任何更改并且没有提交,它们就会丢失。 :)
  • 使缓存失效不会导致更改丢失。我什至不确定这将如何工作。如果您保存文件,则无论 IntelliJ 缓存或提交到存储库如何,它都会被保存。
  • 救我一命,谢谢。
  • 这里的最新答案之一是针对一个相当古老的问题。
【解决方案3】:

我遇到了同样的问题,结果我从未完全编译过新项目。所以右键单击并选择编译''(mac上的shift-cmd-F9)修复它。似乎保存时编译不会“看到”未编译的文件。

将 src 文件夹标记为源对我的情况没有有帮助。

【讨论】:

    【解决方案4】:

    这很可能是您的 ../src 文件夹在 Intellij IDEA 中未标记为“源”文件夹,因此它不知道到那里查找您的课程。您可以在项目资源管理器中右键单击该文件夹并选择“标记为源文件夹”来解决此问题。

    【讨论】:

    • 1 是可能的,但是 2 不会给他一个错误说它找不到 HUD,而是一个错误说它没有 getInstance/update 方法吗?
    • 这个选项好像没有了。
    • 不,它转换为弹出选项:“将目录标记为>”
    • 我的 src 包含测试文件夹和多个模块,在将其标记为 Source Root 后,我​​的问题是最糟糕的。
    • 对我来说,这接近于正确答案。我的源根已被标记,但我必须“取消标记为源根”,然后再次将其标记为源根以修复错误。
    【解决方案5】:

    当我执行Build -> Make Project 时,我遇到了同样的“找不到符号”错误。我通过删除我的 Maven /target 文件夹、右键单击我的项目模块并执行 Maven -> Reimport 并执行 Build -> Rebuild Project 来解决此问题。这是在 IntelliJ Idea 13.1.5 上。

    事实证明Maven -> Reimport 是关键,因为在我最终这样做之前,问题又出现了几次。

    【讨论】:

    • 同样,您也可以删除有问题的模块(在我的情况下是 gradle 模块),然后使用 File -> New -> Module 从现有来源重新导入,这是我必须做的。虽然我还必须手动修改 .idea 文件才能重新导入才能最终工作:stackoverflow.com/questions/18881062/…
    【解决方案6】:

    对我来说 - 我尝试了这些步骤(使缓存无效并重新启动、Maven 重新导入))但它们没有用。所以我删除了.idea.settings.project 文件夹并尝试了——它成功了。

    【讨论】:

    • 删除 .idea 文件夹对我有用。
    • 这很有效,因为我在第二个驱动器上有几个库,并且 Windows 更新(哦,不断赠送的礼物)创建了一个更改驱动器号的引导分区。在我删除 .idea 文件夹之前,即使删除旧链接并在项目设置库下重新添加它们也不起作用。然后在构建菜单下出现重新编译模块的选项。
    【解决方案7】:

    到目前为止,感谢您的帮助,原来修复是首先编译 HUD.java(右键单击文件-> 编译 HUD.java)。编译完java文件后,项目的其余部分就可以顺利编译了。

    我真的不知道为什么会修复它,或者为什么 IntelliJ 不会自动执行此操作,但根错误似乎与 IntelliJ 未正确处理单个 .java 文件中的多个类有关。

    【讨论】:

    • IntelliJ 可以很好地处理单个文件中的多个类,它只需要确保文件在某个时候被编译。
    • 是的,只是我在单个类文件中遇到了同样的问题。奇怪的是,在我运行这个 maven 命令之前它运行得很好:mvn com.zenjava:javafx-maven-plugin:2.0:fix-classpath。这意味着将 javafx jar 从 libs 目录移动到当前 JDK 的 ext 目录。我找到了here
    【解决方案8】:

    我遇到了同样的问题,答案中给出了很多解决方案,尝试所有这些解决方案花了我相当长的时间,所以如果你遇到这个错误,我想在这里提出一个有条不紊的方法。

    检查以下内容,如有缺失则创建/更新

    1. src 文件夹被标记为源文件夹
    2. .imls 文件存在
    3. 注释处理已启用
    4. 如果你最近用过@UtilityClass 那么也可能是这个原因,Bug Link

    如果一切正常,您可以按给定顺序尝试以下解决方案

    1. 重新编译文件/模块

    2. 如果这不能解决问题,请尝试刷新 maven 依赖项并使用 Maven -> ReimportBuild -> Rebuild Project 构建项目

    3. 试试mvn clean install -DskipTests

    4. 尝试使用 File > Invalidate caches/ restart 使 IntelliJ 缓存无效并重新启动 IDE

    5. 删除.idea文件夹并重新导入项目

    感谢所有回答此问题的人,您可以参考他们的答案以获取有关每个点的更多描述。

    【讨论】:

    • 有效:尝试使用 File > Invalidate caches/restart 使 IntelliJ 缓存无效并重新启动 IDE
    【解决方案9】:

    当我删除一个文件夹然后将其复制粘贴回项目时发生这种情况。

    Right-click project folder -> Rebuild 为我工作。

    【讨论】:

      【解决方案10】:

      我必须右键单击该项目,然后在“运行 Maven”子菜单下选择“重新导入”。

      【讨论】:

        【解决方案11】:

        我在我的项目中使用 maven。出于某种原因,IntelliJ 给了我这些奇怪的错误。我运行 mvn clean 并尝试重新同步,这些错误消失了。

        【讨论】:

        • clean 是一个 Maven 生命周期。如果要清理 maven 项目创建的所有输出文件,可以使用它。
        【解决方案12】:

        我通过右键单击 Java 文件夹并重建解决了这个问题

        【讨论】:

          【解决方案13】:

          重新编译主 Application.java 类为我做了,右键单击类>重新编译

          【讨论】:

            【解决方案14】:

            如果您使用的是 Lombok,请确保您已启用注释处理。

            【讨论】:

              【解决方案15】:

              对我来说是 Lombok 的一个问题,因为它需要启用注释处理。你可以在Settings > Build > Compiler > Annotation Processors找到这个复选框

              【讨论】:

              • 谢谢!这为我解决了问题。
              【解决方案16】:

              我知道这是一个老问题,但根据我最近的经验,发生这种情况是因为构建资源被删除或 Idea 无法将它们识别为源。

              无论哪里出现错误,请提供文件夹/目录的来源,并且必须解决此错误。

              有时即使我们为整个文件夹分配源,个别类可能仍然不可用。对于新手用户来说,简单的解决方案是导入一个新的副本并再次构建应用程序。

              建议在此之后进行全新安装。

              【讨论】:

                【解决方案17】:

                我知道这个线程很旧,但是另一个解决方案是运行

                $ mvn clean install -Dmaven.test.skip=true
                

                在 IntelliJ 上执行 CMD + Shift + A (mac os) -> 输入“重新导入所有 Maven 项目”。

                如果这不起作用,请尝试强制重新下载 maven 依赖项

                $ mvn clean -U install -Dmaven.test.skip=true
                

                【讨论】:

                • 在我的例子中,代码的其他部分引用了自动生成的类(基于 XML 文件)。在使用 maven 构建时,如果不是 mvn installed,IntelliJ 没有看到这些引用并且运行环境失败。
                【解决方案18】:

                就我而言,问题在于在 Intellij Idea 的 java 项目中使用 Lombok 的实验功能 @UtilityClass 将类方法注释为“静态”。当我明确地将类的每个方法设置为“静态”而不是使用注释时,所有编译问题都消失了。

                【讨论】:

                  【解决方案19】:

                  对我来说,错误来自@RequiredArgsConstructor(onConstructor = @__(@Inject)),消息是cannot find symbol __。上面的错误消息是“java:您没有使用 lombok 支持的编译器,因此 lombok 将无法工作并且已被禁用”。

                  在 VM 选项中添加下面的参数按照建议 here 为我工作。

                  -Djps.track.ap.dependencies=false
                  

                  【讨论】:

                    【解决方案20】:

                    由于这是 Google 搜索“intelliJ 找不到符号”错误的第一次点击,因此我也将提出我的解决方案。

                    对我来说问题是我的项目源自 Eclipse,并且一些文件包含对在 pom.xml 中的规范在 src/generated-sources 中生成的类的依赖。由于某种原因,当我第一次打开项目并且重建/重新导入没有帮助时,这没有正确执行,因此从未生成文件。

                    解决方案是右键单击该模块,然后选择Maven -> Generate Sources and Update Folders 这样就解决了问题,我可以编译了。

                    【讨论】:

                      【解决方案21】:

                      确保您尝试引用的 java 类的源文件具有 .java 扩展名。在我的情况下是.aj(我必须在创建它时点击“创建方面”而不是“创建类”)。 IntelliJ 显示此文件的图标与“普通”类相同,但编译器在构建时看不到它。

                      .aj 更改为 .java 在我的情况下修复了它。

                      【讨论】:

                        【解决方案22】:

                        有时您想要的类位于test 源目录中。反正发生在我身上……

                        【讨论】:

                          【解决方案23】:

                          我遇到了同样的问题,只是我正在导入依赖项无法以某种方式解决的类。我刷新了 maven 项目,Rebuild Project。它仍然没有解决。 看起来 IntelliJ 缓存的东西不正确。 我重新启动了 IntelliJ 并解决了依赖关系。我猜它以某种方式清除了缓存。

                          【讨论】:

                            【解决方案24】:

                            我看到很多建议构建或重新构建的答案,但以防万一这不能解决您的问题,请注意 IDEA 可以检测到方法,但如果您有 @987654323,它将无法编译@ before 因为它会期待实例。

                            【讨论】:

                              【解决方案25】:

                              就我而言,我在从另一个模块中查找类时遇到了问题。在pom.xml 中,我刚刚指定了<scope>compile</scope> 的这种依赖关系。删除这条线有帮助。

                              【讨论】:

                              • 不删除范围仍然意味着“编译”..?
                              【解决方案26】:

                              这对我有用,比如 A 类依赖于 B 类(以及 c、d 类等),但是错误会在没有任何错误的 A 类上引发。所以我尝试先单独编译A类->它在B类的包上显示错误。所以试图编译B类的整个包。现在它抛出了确切的错误类(在我的案例中,B类有错误)。通常 Intellj 在编译/构建时会显示带有行号的确切错误类。在某些情况下,它会在错误的地方/班级中引发错误。试一试。

                              【讨论】:

                                【解决方案27】:

                                Maven 重新导入重建项目使缓存无效 没有帮助时,我从 .想法文件夹,不是整个文件夹,所以我保存了自定义项目设置。

                                ...当这里没有任何内容有助于检查 here

                                发布的 idea.log 文件

                                【讨论】:

                                  【解决方案28】:

                                  我尝试了所有方法,但没有任何效果。所以,在浪费了几个小时之后,我决定升级 IntelliJidea 版本,终于成功了!

                                  【讨论】:

                                    【解决方案29】:

                                    删除~/.m2 中的所有内容。开始intellij-idea。 (使用 IntelliJ IDEA 2021.3(社区版))

                                    【讨论】:

                                      【解决方案30】:

                                      我知道这是旧的,但对于其他任何人,请确保缺少的类与您收到错误/从哪里调用它的类在同一个包中。

                                      【讨论】:

                                      • 否决,因为类可以从其他包中导入。一般目标类必须被导入并在classpath中;使用Maven时,必须正确设置依赖。
                                      猜你喜欢
                                      • 2019-01-08
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2015-01-11
                                      • 1970-01-01
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多