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

平台: IntelliJ 社区版 10.0.3
SDK: jdk1.6.0_21
操作系统: 视窗 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的设置=>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文件中的记录器导入就好了。但是,对于所有hunysoft导入,它报告:“无法解析符号'ByteString/Field/FieldBody'”,但是Build =>编译'StackOverflowQuestion.java'可以正确编译所有内容,并且我为此类创建的单元测试运行良好(尽管意图也将对create()的调用标记为问题区域)。

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

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

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

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

这是清单。来自 jmime jar 文件的 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,它会不会)。

那么,有人有任何IDEA吗?


答案 1

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

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


答案 2

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

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

我的想法版本是12.0.4


推荐