当前位置: 首页 > 面试题库 >

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

夏侯星洲
2023-03-14
问题内容

平台:IntelliJ社区版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依赖关系之上)。

<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导入都起作用。

哦,另一件事,如果我转到“项目”窗口中的“包”视图,则会出现“ 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没有提供任何东西,但是我不确定如果缺少依赖罐,它将不会)。

那么,有人有想法吗?


问题答案:

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

在某些奇怪的情况下,编译后的类可能会报告错误的信息并使IDEA感到困惑。使用javap验证此jar中的类报告正确的名称。



 类似资料:
  • 我拥有的: Intellij IDEA 2019.3,捆绑JDK 11.0.3 一个带有JDK项目的Maven项目:捆绑的JDK 我的问题: 对于任何导入我得到错误但我仍然可以正确编译。 我完全知道很多人已经讨论过这个问题,当然我已经尝试过所有的问题: 使用对话框“Setup JDK”一千次再次设置项目JDK 验证所有模块和项目使用正确的语言级别11 使缓存/重新启动无效 删除文件

  • 我已经尝试过重新构建项目、./Gradlew clean、关闭和重新打开我的项目。

  • 我认为,错误消息与无关,而是因为代码/程序集/包特定的结构/修饰符等。 因此,当导航(通过命令)到元数据并很好地编译代码(包括,也成功地显示方法说明)时,会显示错误(并且无法访问(来自引用的程序集的)代码)。 该方法在程序集中定义如下: 有什么想法吗?

  • 我正试着用Spring开始我的第一个项目。我使用IntelliJ idea,我对它也有点陌生。但无论如何,我遵循了Jetbrains网站上写的步骤,我不知道我做错了什么,但我在默认创建的第一个文件中遇到了很多错误。 Bloombookingapplication。Java语言 也许我很蠢,但我不知道我错过了哪一步... 我该怎么解决这个问题? 我已经找到了使用快速修复按钮添加Spring的方法。

  • 这个项目编制得很好。然而,Android studio 3.0.1以红色显示对一个特定库的引用,并显示“无法解析符号”。即使单步执行该库模块也不起作用。