当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《IntelliJ检查给出"无法解析符号"但仍编译代码》经验,为你挑选了9个好方法。

平台:IntelliJ Community Edition 10.0.3
SDK:jdk1.6.0_21
操作系统:Windows 7

所以我对IntelliJ有一个奇怪的情况让我完全难过.我设置了一个Maven项目,并将log4j作为依赖项添加到pom.xml文件中.IDEA检查运行正常,我的单元测试全部编译运行.

然后我使用mvn install:install-file将hunnysoft的jmime库添加到我的本地maven存储库,如下所示.

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

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

然后我进入IntelliJ的Settings => Maven => Repository Services并更新了我的本地存储库(以便IntelliJ重新索引存储库内容).

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


    jmime
    jmime
    3.1.1e

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

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导入.

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

似乎检查的类路径被破坏了,但在Settings => Intentions |中,似乎没有任何设置.编译器区域(不是我预期的任何这样的设置,我相信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).

那么,任何人都有任何IDAs?



1> CrazyCoder..:

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

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


@pastafarian,support@jetbrains.com是我=)
无论多少次尝试,无效都无效.我删除了.idea文件夹,然后使用build.gradle重新导入项目.它现在有效.
谢谢你的回复.事实证明,最后,我必须告诉IDEA"使用Maven 3导入我的Maven项目".在Settings-> Maven-> Importing下.与support@jetbrains.com进行长时间的电子邮件交流后发现.
FWIW,这些修复程序对我不起作用.我有一个maven项目,它依赖于另一个项目.在IDEA 10.5内部和外部构建工作,但是其他项目中的一些符号在依赖项目中标记为红色.缓存无效并重新启动.没运气.还删除了IDEA文件并重新导入了依赖项目.没运气.

2> 小智..:

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

右键单击代码编辑器

将鼠标悬停在Maven上并展开

单击重新导入

我的想法版本是12.0.4


右键单击是我的提示.显然我的pom.xml没有标记为maven文件,因此我需要右键单击并标记为Maven.我启用了"自动导入Maven项目"以及之后导入的所有包.
对于2017.1.x正在进行重新进口的maven项目:``View - > Tool Windows - > Maven Projects``,然后点击循环箭头图标.

3> cerisier..:

以上解决方案都不适合我.什么做了手动删除main.iml文件,它突然工作.


非常感谢!这也是解决我遇到的问题的唯一解决方案。发生的事情是我的项目被重命名,而IntelliJ却以某种方式没有清除.idea / modules下的旧.iml文件。删除那些多余的.iml文件,然后重新构建项目即可解决此问题。
我不知道我刚刚删除了什么,但这解决了我的问题。谢谢!

4> bbarker..:

对于Gradle用户:

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

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

我自己的情况:我正在使用Gradle的Scala项目并且必须这样做.


Gradle Tool窗格位于:`View> Tool Windows> Gradle`

5> Tom..:

这是在另一个回答同样的问题提到这里,但仅此修复这对我来说.我在IntelliJ之外的一个单独的终端中完成所有构建.因此缓存需要为IntelliJ应用程序设置适当的权限才能读取它们.

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

$ mvn -U idea:idea



6> Matthew Chen..:

另外一步,当我执行文件 - >无效缓存并重新启动IDE时,打开一个项目.它在右上方弹出一个toastbox,询问我是否启用自动导入,这解决了问题.



7> Landon Kuhn..:

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



8> Babken Varda..:

项目结构中不一致/重复的模块名称对我来说是个问题.

    File -> Project Strucutre -> Modules

    单击具有红色下划线的模块

    得到"依赖关系"选项卡

    确保依赖项列表中实际存在红色的依赖项.如果没有,请重命名它们以匹配现有依赖项名称

当IntelliJ未正确关闭并因此无法正确保存重命名的模块名称时,可能会发生这种情况.



9> 小智..:

有固定的发表?由于2013年的"编译器大修"而出现了最初影响v11/12的问题.在2014年底之前讨论了Jira的相关问题.http: //youtrack.jetbrains.com/issue/IDEA-98425

同样在Jira IDEA-98425上标记为固定未经验证(在v12.0.3上).下面的解决方法都没有帮助解决Windows 上版本13.1.1的"无法解决符号"问题

一个.删除.IdealIC13文件夹(然后,File\Invalidate Caches/Restart)

湾 从Maven Projects窗口,

b.1 mvn -U idea:idea - >执行这个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支持似乎被打破了.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有