平台: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(“Go To Declaration”)适用于 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,我不确定它是否会出现)。
那么,有人有任何想法吗?
首先,您应该尝试File | Invalidate Caches,如果没有帮助,请删除IDEA 系统目录。然后重新导入 Maven 项目,看看是否有帮助。
File | Invalidate Caches
在某些奇怪的情况下,编译的类可能会报告错误的信息并混淆 IDEA。使用javap验证此 jar 中的类是否报告了正确的名称。