IntelliJ检查给出“无法解析符号”但仍编译代码

平台:IntelliJ社区版10.0.3
SDK:jdk1.60_21
操作系统:Windows 7

所以我在IntelliJ中遇到了一个奇怪的情况,让我完全陷入困境。我设置了一个Maven项目并在pom.xml文件中添加log4j作为依赖项。IDEA检查运行良好,我的单元测试都编译并运行。

然后,我使用mvn安装:安装文件将hunnysoft的jmime库添加到我的本地maven存储库中,如下所示。

mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar

Maven将jar文件安装到我的本地存储库中。

然后我进入IntelliJ的设置=>Maven=>存储库服务并更新了我的本地存储库(以便IntelliJ重新索引存储库内容)。

最后,我将以下依赖项添加到我的pom.xml文件中(就在log4j依赖项之上)。

<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>

我现在创建一个新类如下:

package com.stackoverflow.question;


import org.apache.log4j.Logger;
import com.hunnysoft.jmime.ByteString;
import com.hunnysoft.jmime.Field;
import com.hunnysoft.jmime.FieldBody;


public class StackOverflowQuestion {
public Field create(String name, String text) {
Logger.getLogger(getClass()).debug("create entered");
FieldBody body = new FieldBody();
body.setText(new ByteString(text));
Field field = new Field();
field.setFieldName(name);
field.setFieldBody(body);
return field;
}
}

现在说点奇怪的事情。IntelliJ的意图机制可以很好地识别maven pom文件中的Logger导入。然而,对于它报告的所有hunnysoft导入:无法解析符号'ByteString/Field/FieldBody',但是 Build=>Compile'StackOverflowQuestion.java'正确编译了所有内容,我为这个类创建的单元测试运行良好(尽管意图也将对create()的调用标记为问题区域)。

所以在某个地方,IntelliJ不知何故忽略了意图子系统的jmime.jar文件。我很困惑,因为log4j依赖项工作正常,一切都编译和运行正常。F12(“转到声明”)适用于Logger导入,但在所有jmime导入上中断。

哦,还有一件事,如果我转到“Projects”窗口中的“Packages”视图,则会出现“com.hunnysoft.jmime”包,并且我可以看到我在上面的“库”下的代码片段中导入的所有类。从pom.xml文件中删除上述依赖项会导致此包消失并且编译中断。

看起来检查的类路径被破坏了,但似乎在设置=>意图|编译器区域的任何地方都没有设置(不是我期望任何这样的设置,我相信IDEA应该已经知道基于pom文件和JDK的正确类路径)。

作为最后的实验,我创建了一个全新的标准J2SE应用程序项目(不使用maven),并将jmime.jar文件作为其库之一直接添加到项目中。在这个新项目中,我遇到了与上述完全相同的问题。

这是jmime jar文件中的MANIFEST.MF。

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.4
Created-By: 10.0-b23 (Sun Microsystems Inc.)


Name: com/hunnysoft/jmime/
Sealed: true
Specification-Title: Hunny JMIME
Specification-Version: 3.1.1
Specification-Vendor: Hunny Software, Inc.
Implementation-Title: com.hunnysoft.jmime
Implementation-Version: 3.1.1E
Implementation-Vendor: Hunny Software, Inc.

我在这个jar文件中没有看到任何异常。

我最好的猜测是,这个问题可能是缺少依赖项问题。但是AFAIK jmime应该是自包含的(JarAnalyzer没有提出任何东西,但我不确定如果缺少依赖项jar会不会出现)。

有人有任何想法吗?

717824 次浏览

是的,听起来您必须创建包含您需要的JAR的库,并将它们作为依赖项添加到您的模块中。

首先,您应该尝试File | Invalidate Caches,如果没有帮助,请删除IDEA系统目录。然后重新导入Maven项目并查看它是否有帮助。

在一些奇怪的情况下,编译的类可能会报告错误的信息并混淆IDEA。验证此jar中的类是否使用javap报告正确的名称。

我只是遇到了这个问题,它就是不会消失。我最终删除了~中的IntelliJ配置目录,从头开始重建了我的IntelliJ项目。(与花一个小时试图解决缓存文件等问题相比,这最终只花了大约15分钟。)

请注意,我的猜测是最初的问题是由javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(注意:截至2018年,该链接已死,但archive.org在首次编写此答案时就有页面的副本。)或导致Java崩溃的磁盘空间/内存问题。

另一件需要检查的事情:确保依赖关系不重复。在我的案例中,我发现表现出这种行为的模块配置错误如下:它依赖于另一个模块,并且它依赖于另一个模块产生的jar。这意味着重复引用的每个符号,并且是模棱两可的。

还有一个额外的步骤,当我执行File->Inval的缓存并重新启动IDE时,打开一个项目。它在右上角弹出一个Toastbox,询问我是否启用自动导入,这解决了问题。

以下技巧为我解决了这个问题:

  • 右键单击代码编辑器
  • 将鼠标悬停在Maven上并展开
  • 点击重新导入

我的想法版本是12.0.4

另一种选择。

我在使用JDK7_07时也遇到了这个问题。我尝试了这里的所有答案(除了删除IDEA系统目录)。但是,我还是遇到了问题。所以我做的是:

安装最新的JDK(JDK7_45),并将Intellij的JDK设置为新的JDK,它就可以工作了。

在使我的缓存无效并重新启动;并确认我的maven设置正常后,我仍然看到一个模块的“无法解析符号”,我肯定已经将其设置为依赖项。结果我把它设置到错误的范围。

您可以通过右键单击您的模块并选择打开模块设置来检查。单击依赖项选项卡并验证无法解析的依赖项的范围是否设置为编译。

重新导入项目对我有用。 右键单击项目->Maven->重新导入

当我做文件->无效缓存并重新启动IDE时,打开一个项目。它在右上角的“检测到Maven更改”上显示了一个对话,并提供了导入和启用自动导入的选项。即使在这里导入项目后,我也遇到了同样的问题。上面的步骤解决了问题。

是否已修复?由于2013年的“编译器大修”,问题最初影响到v11/12。Jira中对相关问题的讨论截至2014年底。 http://youtrack.jetbrains.com/issue/IDEA-98425

同样在Jira上IDEA-98425标记为固定未经证实(在v12.0.3上)。以下变通方法都没有帮助解决Windows上版本13.1.1“无法解析符号”问题

一种。删除.理想文件夹(然后,文件\Inval的缓存/重新启动)

b.从Maven项目窗口,

b.1mvn-u方法名称->执行此maven目标假设重新加载依赖项。这在以前有效,但自上次FRI以来,执行此maven目标失败,因为它试图重新编译项目(当然它失败为“无法解析符号”,这就是我首先运行此命令试图修复的问题)mvn-version-显示引用3.2.5的maven版本并且它正在工作

b.2只需右键单击项目,然后重新导入

b.3文件\使缓存无效/重新启动

c.尝试启用和禁用此设置:文件->设置->Maven->导入->“使用maven3导入项目”

d.设置\Maven\Multiproject构建失败策略=最终失败(而不是默认)

什么都不起作用。Maven上的IntelliJ支持发生了什么。

https://youtrack.jetbrains.com/issue/IDEA-99302

来自JetBeans发布历史,https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEC 2013

我假设v12修复(尽管未经核实)将被合并到后续版本中。有没有人在哪个IntelliJ版本上遇到类似的问题?请分享您的经验。IntelliJ maven支持似乎已损坏。

对于Gradle用户:

您可能需要将项目与build.gradle文件同步。

您可以右键单击项目窗格下的gradle文件来执行此操作,似乎对我没有任何作用(我怀疑我的版本中有bug)。您会知道是否会发生这种情况,因为它不会启动您将等待的任何IntelliJ任务。相反,打开Gradle工具窗格,然后单击同步(刷新)按钮。这在使缓存无效和重新启动没有的情况下对我有效。

我自己的情况:我正在使用Gradle的Scala项目,不得不这样做。

对于Intellij Idea用户,甚至在导入项目之前执行此命令可能会有所帮助:

./gradlew build
./gradlew idea

我的项目结构:

src -> main -> scala -> mypackages

什么工作:

右键单击scala文件夹,然后单击“将目录标记为源根”。

项目结构中不一致/重复的模块名称导致了这个问题。

  1. 转到File -> Project Strucutre -> Modules
  2. 在单击具有红色下划线的模块
  3. 进入“依赖项”选项卡
  4. 确保红色的依赖项确实存在于依赖列表中。如果不是,重命名它们以匹配现有的依赖项名称

这可能发生在IntelliJ没有正确关闭,因此无法正确保存重命名的模块名称时。

在我的例子中,只有BuildDir被删除。 在这种情况下,File | Invalidate Caches不起作用。

当我在File | Invalidate Caches之前做Build | Make Project时,一切都很好。

上面的解决方案都不适合我。所做的是手动删除main.iml文件,它突然起作用了。

如果maven项目,只需转到设置->构建工具->maven->导入。 选中“自动导入maven项目”复选框。 这将解决问题

  1. 打开“设置”
  2. 搜索“Maven”
  3. 点击“Maven”下的“忽略文件”
  4. 取消选中包含缺失依赖项的pom.xml文件
  5. 点击“OK”
  6. 单击文件->无效缓存/重新启动…
  7. 单击“无效并重新启动”

无效缓存为我工作,但运行应用程序后出现相同的错误。

所以我尝试了(Intellij):

1-菜单栏-重构|构建|运行|工具 -单击构建,然后单击重建项目

2-MVN清洁

3-右键单击项目>Maven>生成源和更新文件夹

希望这对你有用。

谢了

上述解决方案都没有为我解决问题。我遇到了同样的问题,代码编译得很好,但IntelliJ显示它找不到导入。尽管IntelliJ首先从代码完成中建议导入。

我的解决方案是将所有内容移动到默认包,删除com.foo.bar包,然后再次创建它并将所有内容移回。

这在对同一问题这里的另一个回答中提到,但仅此一项就为我解决了这个问题。我在IntelliJ之外的单独终端中进行所有构建。因此,缓存需要为IntelliJ应用程序设置适当的权限才能读取它们。

从项目的根文件夹运行它。

$ mvn -U idea:idea

或者你导入的文件太large.this是我的情况,当我将Intellij属性:iead.max.intellisen.filesize(路径是${想法dir}/bin/idea.properties)更改为更大的值,如25000,并重新启动IDE时,问题消失了。希望这有帮助。

建议的解决方案不起作用。我不得不unignore几个项目,右键单击pom=>maven=>unignore项目。

然后经过一段

mvn clean install -T 6 -DskipTests

在控制台中,IntelliJ再次高兴起来。不知道项目是如何被忽略的……

有时,我只是打开项目结构,然后单击项目,然后单击选择SDK版本

当我换了一台新电脑时,我也遇到了类似的问题。

我复制了所有IDEA文件(甚至是相关的%APPDATA%-文件夹),但随后Maven构建成功,但IDEA在构建时没有从依赖项中找到任何类。

解决方案:我从一个新的干净的IDEA配置文件开始,从%APPDATA%-文件夹中删除文件夹

对于Idea 2017.1+Gradle,该插件在某种程度上有错误。尝试了所有同步、无效+重启,但没有任何效果。根据https://github.com/gradle/gradle/issues/2315,这对我有效: 1.关闭想法 2.在命令行中输入gradle想法(应该生成3个文件:. iml、. ipr、. iws) 3.运行想法并打开创建的文件. ipr,这应该从头开始导入您的项目,在这3个文件中具有硬连线依赖关系

mvn idea:idea为我工作。找到了这里。花了一个多小时,希望对某人有帮助

如果没有成功,右键单击您的源目录,将目录标记为“Source Directory”,然后右键单击项目目录并maven->重新导入。

这解决了我的问题。

删除项目内java和test文件夹中的: iml文件并 无效并重新启动。

它会询问我是否可以删除项目。输入是。错误将消失。

“文件->无效缓存和重新启动”将解决所有依赖项。

是什么帮助我解决了这个问题:

我有另一个分支,已切换到该分支并使用mvn清洁安装构建项目。一切正常,然后切换回主服务器并再次构建项目,错误消失了。无效缓存和重新启动对我没有帮助。

对我有用的是将红色标记的类所在的目录“标记为目录源根目录”,之后红色标记消失了。似乎出于某种原因,它没有被标记。

有时,当你创建像com.mydomain.something目录结构不被创建这样的包时,你被命名为只剩下一个文件夹 com.mydomain.something在这种情况下,您应该创建目录结构,如

com
|_mydomain
|_something

转到文件->项目结构->SDK并检查您的SDK文件路径是否正确。

导入标准java库时遇到问题,例如java.beans.*

通过将它指向正确的JRE路径,在我的Redhat 7系统上修复了它。

文件->项目结构->SDK s->1.8 将“JDK主路径:”更改为 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0161-2.b14.el7.x86_64而不是 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0161-2.b14.el7_4。x86_64

以前的jdk路径(路径_4)几乎没有任何内容。它缺少许多Java库。

在我的情况下,我试图从IntellijIdea打开一个Spring引导项目,遇到了同样的问题,比如无法导入所有与Spring相关的文件。

然后我做了:

文件->关闭项目->导入项目->从外部模型导入->选择Gradle->下一步->从文件位置选择项目->完成

现在一切都如预期的那样顺利。

我在这里看到了很多答案,但我终于找到了这个解决方案。它可能对像我这样的人有用。

其他的回答都不适合我。我的导入没有得到解决,因为IntelliJ指向了错误的. m2文件。

IntelliJ版本:IntelliJ创意2018.1.5

我的. m2目录的位置指向了错误的路径。我所做的只是将IntelliJ重新指向正确的. m2目录并更新它。

首先,转到:文件->设置->构建,执行,部署->构建工具->Maven

我必须将用户设置文件:本地存储库:更改为我的. m2目录的正确位置。

之后转到:文件->设置->构建,执行,部署->构建工具->Maven->存储库

然后单击更新按钮。

如果我的所有pom.xml文件都配置正确,并且我在IntelliJ中仍然存在Maven问题,我将执行以下步骤

  1. 阅读如何使用maven在IntelliJ最近
  2. 确保IntelliJ配置为使用捆绑Maven 3
  3. 查找并终止正在为IntelliJ执行Maven 3 repos索引的实际java进程(IntelliJ运行时可以完成终止)。如果索引或依赖关系不可用(思想存储库在pom.xml中配置)。
  4. 强迫更新中的所有存储库"IntelliJ/设置/构建工具/Maven/存储库 / ". 占用大部分时间,磁盘空间和带宽!我花了20多分钟来更新Maven中央存储库的索引。
  5. 再次从IntelliJ中重新导入所有Maven项目
  6. 如果您有多个存储库和一个复杂的项目,那么执行步骤1-4让IntelliJ及其恶魔java进程在夜间运行是一个很好的做法,因此您可以在第二天同步所有内容。理论上,您可以使用所有流行的索引存储库并同时为所有存储库启动索引更新(我假设IntelliJ创建了一个队列并一个接一个地运行更新),然后可能需要几个小时才能完成(您也需要增加堆空间)。

附言。 我花了几个小时才明白(步骤3)IntelliJ处理maven索引更新的java恶魔进程做错了什么,我只需要让IntelliJ从头开始。

为了MAVEN

我尝试了上述所有方法,但找不到解决方案。

所以下面是我尝试的步骤(一些解决方案的混合),

  1. mvn干净

  2. mvn创意:干净

  3. 使缓存无效并重新启动
  4. 删除您在项目结构中看到的所有额外的. iml文件。
  5. 在项目的根目录下,运行mvn想法:想法和mvn清洁安装,重新导入maven项目的所有依赖项。

(确保除了项目/子项目. iml文件之外没有额外的. iml文件)

如果您的maven项目是多模块项目,请检查intellij是否忽略了某些模块。

  1. 点击View->Tool Windows->Maven Projects,检查是否忽略了某些模块(忽略的模块为灰色,例如下图中的gs-multi-module)。

在此处输入图片描述

  1. 右键单击忽略的模块并选择Unignore Projects

在此处输入图片描述

然后等待intellij完成索引,之后它将工作。

自动检查导入Maven项目,修复了我的问题

自动检查导入Maven项目,修复了我的问题。我花了两个小时弄清楚我做错了什么。终于能够修复它。

对于Gradle项目:

  1. 出口IntelliJ IDEA
  2. 删除<problematic-project-root>/.idea目录
  3. 删除<problematic-project-root>/.gradle目录
  4. 删除<problematic-project-root>中的所有.iml文件
    • Windows命令提示符DEL /S /Q *.iml
    • linux:find . | grep -e .iml$ | xargs rm
  5. 使用Gradle将项目重新导入IntelliJ IDEA

无效缓存/重新启动…的头号建议对我不起作用,其他任何解决方案也不起作用。最终,我的maven repos设置不正确,我通过手动覆盖settings.xml和存储库目录来修复这个问题:

文件->设置…->构建、执行、部署->构建工具->Maven

然后对于用户设置文件本地存储库,选中覆盖并将其指向正确的settings.xml和存储库目录。

这似乎发生在我身上,主要是当依赖项jar也是一个Fat Jar时。幸运的是,我控制了Fat Jar的构建,在使它成为一个非Fat Jar之后,事情就正常了。这里任何答案或评论的其他修复都不适合我。同样值得注意的是,我的代码是静态编程语言的,Fat Jar也捆绑了一些静态编程语言的依赖项。

验证成功。我的想法版本是2019.2

快速修复: 1.usemaven安装依赖模块,然后重新导入所有模块 2.compile当前模块,如果仍未找到,请关闭所有想法窗口,重新启动想法。

  1. 找出您的pom文件中找不到的包。
  2. 然后从您的本地存储库中删除它们。

我的项目面临同样的问题,因为pom中的一个罐子无法正常加载。

我测试了上面的所有解决方案,最终决定手动清空我的Maven存储库(我实际上删除了linux上的.m2文件夹)。它成功了。

按“转变”两次>“重新导入所有Maven项目”总是适合我。

在此处输入图片描述

以前的答案对我不起作用。从版本2020.1切换到2018.2,一切似乎都很好。

我试图使缓存无效,它不适合我。

但是,我尝试从平台设置中删除jdk并将其添加回来,它起作用了。

这是如何做到这一点。

Project Settings -> SDKs -> Select the SDK -> Remove (-) -> Add it back again (+)

在我的情况下,我的项目使用龙目岛,我缺少IntelliJ中的Lombok插件。安装后一切正常。

在我的情况下,一个同事加了龙目岛到项目,我必须安装Idea Lombok插件。在您的情况下,它可能是需要插件的其他东西。

在IntelliJ IDEA2020.3中,选择:

  1. 文件>使缓存无效/重新启动…>无效和重新启动

  2. 当提示下载预构建的共享索引时:

    输入图片描述

    不要导入共享索引:关闭对话框或选择更多行动>别再出现了

对于常春藤用户和IntelliJIdea2020.xx

如果对已经回答的问题没有帮助,
关闭IntelliJ并完全删除文件夹:
C:\用户\#E YZ 0\应用程序数据\#E YZ 1\Jet Brains\#E YZ 2
重新启动IntelliJ项目,它应该解决以前未正确加载的依赖项。

我嫉妒你们所有通过文件/无效缓存解决的人。我刚刚花了几个小时尝试了这个问题的所有内容以及网络上的其他一些问题。

神奇的菜单项没有为我做这件事,所以我通过核%USERPROFILE%\AppData\Local\JetBrains\IntelliJIdea2020.3\caches使缓存无效

一旦我这样做并重新启动IntelliJ(2020.3),索引就被重建了,我的错误就消失了。

我在使用Maven导入JDK时遇到了问题——不知何故,它将自己切换到JDK 11,但Maven Project重新加载仅适用于JDK 8。

在此处输入图片描述

我在使用静态编程语言的lib构建时遇到了类似的问题。 Intellij能够运行我的应用程序,但不能解析某些类及其方法。 然后我意识到我的Intellij中的静态编程语言插件版本已经过时,并且低于构建库的静态编程语言版本。所以我从 File--> Settings-->Languages & Frameworks-->Kotlin,它解决了问题。

我尝试了File | Invalidate Caches,删除. Ide文件夹,缓存文件夹,重新导入项目。但没有任何效果。

因此,更新相应的插件可能会有所帮助。

2022年更新

IntelliJ 2022.1有一个交互式的分步过程File -> Repair IDE。它引导你按顺序完成5个步骤,在使所有项目的缓存无效之前尝试解决当前项目的此问题。从IDEA留档

  1. 刷新项目索引
  2. 重新扫描项目索引
  3. 重新打开项目
  4. 删除共享索引
  5. 重新索引项目
  6. 使缓存无效并重新启动

步骤1-3为我的项目修复了它。

我遇到了一个问题,IntelliJ无法解决String或List甚至java等类。问题是项目没有使用SDK,进入文件>项目结构>项目>SDK并设置适当的SDK并单击应用程序为我修复了它

我曾经有2020.1社区。我修复了安装2020.3终极版的问题。

这似乎发生在我的静态编程语言库中。

这里的任何答案或评论的其他修复都不适合我。

Intellij中的Invalidate caches & Restart为我工作,但重新启动后我需要等待重新索引所有内容。对于我的项目,它需要超过10分钟。

我发现,在简单重启后没有缓存失效的情况下解决问题并不罕见。不总是,但它经常有帮助。

对于一个简单的解决方案,我只是删除了我的IntelliJ版本(以及所有相关文件)并重新安装它。重新导入项目后,这些错误就消失了。