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

问题:

平台: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“”,BUT Build =>编译“StackOverflowQuestion.java”正确编译所有内容,我为此类创建的单元测试运行正常(虽然意图将呼叫create()标记为问题区域)。
所以在某个地方,不知何故IntelliJ忽略了意图子系统的jmime.jar文件。我很困惑,因为log4j依赖性很好,一切都编译并运行正常。 F12(“转到声明”)适用于记录器导入,但会在所有jmime导入中断。
哦,另外一件事,如果我在“项目”窗口中的“软件包”视图中显示“com.hunnysoft.jmime”软件包,我可以看到我在“库”下的代码片段中导入的所有类。从pom.xml文件中删除上述依赖关系会导致此软件包消失,编译会中断。
看来检查的classpath被打破了,但是在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丢失了)。
那么任何人都有任何IDEAs?

回答:

首先,您应该尝试File | Invalidate Caches,如果没有帮助,请删除IDEA system directory。然后重新导入Maven项目,看看它是否有帮助。
在某些奇怪的情况下编译的类可能会报错错误信息并混淆IDEA。验证来自此jar的类是否使用javap报告正确的名称

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: IntelliJ inspection gives “Cannot resolve symbol” but still compiles code

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

29 − 19 =