IntelliJ inspection gives “Cannot resolve symbol” but still compiles code
平台:Intellij社区版10.0.3软件开发工具包:JDK1.6.0 U 21操作系统:Windows 7
所以我和Intellij之间有一个奇怪的情况,这让我完全陷入困境。我设置了一个maven项目,并在pom.xml文件中添加log4j作为依赖项。想法检查运行良好,我的单元测试都编译并运行。
然后,我使用mvn install:install文件将hunnysoft的jmime库添加到本地maven存储库中,如下所示。
1 2 | mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \ -DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar |
Maven在本地存储库中安装了JAR文件。
然后我进入Intellij的设置=>Maven=>Repository Services并更新了我的本地存储库(以便Intellij重新索引存储库内容)。
最后,我将以下依赖项添加到pom.xml文件中(刚好在log4j依赖项之上)。
1 2 3 4 5 | <dependency> <groupId>jmime</groupId> jmime</artifactId> <version>3.1.1e</version> </dependency> |
我现在创建一个新类,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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文件中获取并识别日志程序导入,这很好。但是,对于所有的HunnSuffic导入,它都会报告:"不能解析符号"ByTyScord/Field/FieldStand",但Buff= =编译"StaskOfFultQuest.Java'正确地编译所有的东西,并且为这个类创建的单元测试运行良好(尽管意图标记为CeaTeE()的调用也是一个问题区域)。
因此,不知何故,intellij忽略了意向子系统的jmime.jar文件。我很困惑,因为log4j依赖关系工作得很好,所有的编译和运行都很好。F12("go to declaration")在记录器导入上工作,但在所有JMIME导入上中断。
哦,还有一件事,如果我转到"项目"窗口中的"包"视图,"com.hunnysoft.jmme"包就会出现,我可以看到我在上面"库"下的代码段中导入的所有类。从pom.xml文件中删除上述依赖项会导致此包消失,编译中断。
似乎检查的类路径被破坏了,但是在设置=>意图编译器区域的任何地方似乎都没有这样的设置(不是我预期的任何这样的设置,我相信这个想法应该已经知道了基于pom文件和jdk的正确类路径)。
作为最后一个实验,我创建了一个全新的标准J2SE应用程序项目(不使用maven),并将jmime.jar文件作为其库之一直接添加到项目中。我在这个新项目中遇到了和上面描述的完全相同的问题。
这是jmime jar文件中的manifest.mf。
1 2 3 4 5 6 7 8 9 10 11 12 | 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文件中没有看到任何异常。
我的最佳猜测是,问题可能是缺少依赖性问题。但是AfaikJMIME应该是自包含的(JarAnalyzer不提供任何东西,但我不确定如果缺少依赖性JAR,它会不会)。
那么,有人有什么想法吗?
首先,您应该尝试使用
在一些奇怪的情况下,编译的类可能会报告错误的信息并混淆想法。验证这个jar中的类使用javap报告正确的名称。
以下技巧为我解决了这个问题:
- 右键单击代码编辑器
- 将鼠标悬停在Maven上并展开
- 单击重新导入
我的想法版本是12.0.4
对于Gradle用户:
您可能需要将项目与您的
您可以右键单击项目窗格下的Gradle文件来执行此操作,但这似乎对我没有任何帮助(我怀疑我的版本中存在错误)。您将知道这是否发生,因为它不会启动您将等待的任何Intellij任务。相反,打开渐变工具窗格,然后单击同步(刷新)按钮。这对我很有效,因为无效的缓存和重新启动都没有。
我自己的情况:我和Gradle一起使用一个scala项目,必须这样做。
以上所有的解决方案对我都不起作用。所做的是手动删除main.iml文件,它突然工作了。
另外一个步骤是,当我执行文件->使缓存无效并重新启动IDE时,打开一个项目。它在右上角弹出一个烤面包盒,问我是否启用自动导入,解决了这个问题。
这个问题的另一个答案也提到了这个问题,但这一点为我解决了这个问题。我在Intellij之外的一个单独的终端中完成所有构建。所以缓存需要为Intellij应用程序设置适当的权限才能读取它们。
从项目的根文件夹运行它。
1 | $ mvn -U idea:idea |
另一件要检查的事情是:确保依赖项不重复。在我的例子中,我发现一个显示这种行为的模块被错误地配置为:它依赖于另一个模块,并且它依赖于另一个模块生成的JAR。这意味着每一个重复引用的符号都是模棱两可的。
项目结构中的模块名称不一致/重复导致了此问题。
如果Intellij没有正确关闭,因此无法正确保存重命名的模块名,则会发生这种情况。
固定出版了吗?由于2013的"编译器大修",出现的问题最初影响V11/12。对吉拉2014年底的相关问题进行讨论。HTTP//YouTrcC.JETBROUNS.COM/SUMED/IDEA 98425
JIRA-IDEA 98425也被标记为固定的,但未经验证(V2.0.3)。下面的所有工作都没有帮助解决Windows上的"无法解决的符号"问题
删除.IDEALLIC13文件夹(然后,文件无效的缓存/重新启动)
从Maven项目窗口,
B.1MVN-U思想:想法。执行这个Maven目标假设重新加载依赖项。这在prev中有效,但是自从上一个fri以来,执行这个maven目标失败了,因为它试图重新编译项目(当然它失败了,因为"无法解析符号",这是我试图通过首先运行这个命令来修复的)mvn-version-显示引用了3.2.5的maven版本,并且它正在工作。
B.2只需右键单击项目,然后重新导入
B.3文件使缓存无效/重新启动
c.尝试同时启用和禁用此设置:文件->设置->maven->导入->"使用maven3导入项目"
d.settingsmavenmultiproject build fail policy=结束时失败(而不是默认设置)
没有效果。对maven的intellij支持发生了什么。
https://youtrack.jetbrains.com/issue/idea-99302
来自Jetbeans发布历史,https://www.jetbrains.com/company/history.jsp
Intellij v14 2014年11月
Intellij v13 2013年12月
我假设V12固定(尽管未经验证)将被纳入后续版本中。哪一个版本的Intellij有类似的问题?请分享你的经历。Intellij Maven支持似乎已中断。
没有其他的回答对我起作用。由于ItILLJ指向错误.m2文件,我的导入没有得到解决。
iTeliJ版本:ITELLIJ理念20181.5
我在.m2目录中的位置指向了错误的路径。我所做的就是将intellij重新指向右边的.m2目录并更新它。
首先,转到:文件->设置->生成、执行、部署->生成工具->Maven
我必须将用户设置文件和本地存储库更改为.m2目录的正确位置。
在此之后,转到:文件->设置->构建、执行、部署->构建工具->maven->存储库。
然后单击更新按钮。
我的项目结构:
1 | src -> main -> scala -> mypackages |
有效的:
右键单击
我只是有这个问题,它不会消失。我最终清除了
请注意,我的猜测是,最初的问题是由EDOCX1的2个原因引起的(NB:2018,链接已经死了,但是存档。ORG有一个页面的拷贝,当这个答案是第一次写的时候)。或者是磁盘空间/内存问题导致Java崩溃。Intellij似乎刚被破坏。
有时,我只是打开项目结构,单击项目,然后选择一个SDK版本。
重新导入为我工作的项目。右击project->maven->reimport
当我执行文件->使缓存失效并重新启动IDE时,打开一个项目。它在右上角显示了一个对话框"检测到Maven更改",并提供了导入和启用自动导入的选项。即使在这里导入了项目,我也有同样的问题。上述步骤解决了问题。
在我的缓存无效并重新启动之后,确认我的Maven设置是好的,我仍然看到一个我已经设置为依赖项的模块"不能解析符号"。原来我把它设置在错误的范围。
您可以通过右键单击您的模块并选择打开的模块设置来进行检查。单击"依赖项"选项卡,并验证未解析度依赖项的范围设置为编译。
另一种选择。
我使用JDK7 U07时也遇到了这个问题。我在这里尝试了所有答案(除了删除IDEA系统目录)。但我还是有问题。所以我做的是:
安装最新的JDK(它是JDK7 U45),并将Intellij的JDK设置为新的JDK,它就可以工作了。
在我的例子中,我试图从Intellijidea打开一个Spring引导项目,但遇到了同样的问题,比如无法导入所有与Spring相关的文件。
然后我做到了:
File -> Close Project -> Import Project -> Import from external model -> Choose Gradle -> Next -> Select the project from file location -> Finish
现在一切顺利。
我在这里看到了很多答案,但最终我找到了解决办法。它可能会用到像我这样的人身上。
如果您的Maven项目是多模块项目,请检查Intellij是否忽略了某些模块。
然后等待intellij完成索引,然后它将工作。
对于Intellij IDEA用户,在导入项目之前使用此命令可能会有所帮助:
建造/建造/Grand Lew理念
有时,当您创建诸如com.mydomain.something之类的包时,目录结构不会被创建,只剩下一个名为"com.mydomain.something"在这种情况下,您应该创建目录结构,例如
1 2 3 | com |_mydomain |_something |
建议的解决方案不起作用。我必须通过右键单击pom=>maven=>unignore项目来统一几个项目。
然后之后
1 | mvn clean install -T 6 -DskipTests |
在控制台里,Intellij又高兴了。不知道这些项目是如何被忽略的…
对于Gradle项目:
- windows命令提示:
DEL /S /Q *.iml 。 - Linux:
find . | grep -e .iml$ | xargs rm
是的,听起来您必须创建包含所需JAR的库,并将它们作为依赖项添加到模块中。
以上的解决方案都没有为我解决。我也有同样的问题,代码编译得很好,但intellij显示它找不到导入。尽管intellij首先建议从代码完成时导入。
我的解决方案是将所有内容移动到默认包,删除
在我的例子中,只删除builddir。在这种情况下,
当我在
删除Java中的IML文件和项目中的测试文件夹失效并重新启动。
它将询问我是否可以删除这些项目。放好。错误将消失。
"文件->无效缓存和重新启动"将解析所有依赖项。
自动检查导入Maven项目,修复我的问题。我花了两个小时找出我做错了什么。终于修好了。
对于Maven,
我尝试了以上所有方法,但找不到解决方案,
下面是我尝试的步骤(一些解决方案的组合)。
清理
MVN理念:清洁
(确保除了项目/子项目.iml文件之外没有其他.iml文件)
如果我的pom.xml文件配置正确,并且我在intellij中仍然存在maven问题,那么我将执行以下步骤
附笔。我花了好几个小时才理解(步骤3),处理Maven索引更新的IntInLi的Java恶魔进程出错了,我只需要让Inteliji从头开始。问题解决了,甚至没有重新启动Intellij本身。
导入标准Java库(如Java.BeaS)时遇到困难。
通过将它指向正确的JRE路径,在我的Redhat7系统上修复了它。
文件->项目结构->SDK->1.8将"jdk home path:"更改为/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的路径(路径上有个差异)中几乎没有任何内容。它缺少了许多Java库。
转到文件->项目结构->SDK,检查您的SDK文件路径是否正确。
或者您导入的文件太大。我的情况是,当我将intellij属性:iead.max.intellisen.filesize(路径为$ide a dir/bin/idea.properties)更改为更大的值(如25000)并重新启动IDE时,问题就消失了。希望这有帮助。
是什么帮助我解决这个问题:
我已经有了另一个分支,已经切换到该分支,并用MVN Curror安装构建了项目。一切都好了,然后又转回师父,重新建造这个项目,错误消失了。无效的缓存和重新启动对我没有帮助。
如果是Maven项目,那么只需转到设置->构建工具->Maven->导入。选中"自动导入Maven项目"复选框。会解决问题的。
如果没有任何结果,右键单击源目录,将目录标记为"源目录",然后右键单击项目目录和maven->re-import。
这解决了我的问题。
埃多克斯为我工作。在这里找到的。花了一个多小时,希望能帮助别人
对于IDEA 2017.1+Gradle,插件不知何故有缺陷。已尝试所有同步、失效+重新启动,但没有任何效果。根据https://github.com/gradle/gradle/issues/2315,这对我很有用:1。密切的想法2。在命令行中键入Gradle IDEA(应生成3个文件:.iml,.ipr,.iws)三。运行IDEA并打开创建的文件.ipr,这应该从零开始导入您的项目,在这3个文件中有硬连线依赖项
我换台新电脑时也遇到了类似的问题。
我复制了所有的IDEA文件(甚至相关的%appdata%—文件夹),但是Maven构建成功,但是IDEA在构建它时没有从依赖项中找到任何类。
解决方案:我从一个新的干净的想法配置文件开始,从%appdata%-文件夹中删除文件夹。
在我的例子中,这个问题是在我检查了Maven项目中文件的一个大的重组之后出现的。签出时,我自己的一些未经检查的更改仍处于活动状态。据我所知,这些更改并没有涉及到任何正在重组的文件。
无效缓存和重新启动对我来说不起作用。工作内容是:
- 恢复我在大重组结账前所做的更改
- 重新导入所有maven模块
使缓存无效对我有效,但在运行应用程序之后出现了相同的错误。
所以我尝试了(intellij):
1-菜单栏-重构构建运行工具-单击"生成",然后单击"重建项目"
2 - MVN清洁
3-右键单击项目>Maven>生成源和更新文件夹
希望这对你有用。
谢谢
对我起作用的是"马克作为目录源根",在红色标记消失后,红色标记类的目录。似乎因为某种原因,它是没有标记的。