平台:IntelliJ社区版10.0.3
SDK:jdk1.60_21
操作系统:Windows 7
所以我在IntelliJ中遇到了一个奇怪的情况,让我完全陷入困境。我设置了一个Maven项目并在pom.xml文件中添加log4j作为依赖项。IDEA检查运行良好,我的单元测试都编译并运行。
然后,我使用mvn安装:安装文件将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文件中的Logger导入。然而,对于它报告的所有hunnysoft导入:无法解析符号'ByteString/Field/FieldBody',但是 Build=>Compile'StackOverflowQuestion.java'正确编译了所有内容,我为这个类创建的单元测试运行良好(尽管意图也将对create()的调用标记为问题区域)。
所以在某个地方,IntelliJ不知何故忽略了意图子系统的jmime.jar文件。我很困惑,因为log4j依赖项工作正常,一切都编译和运行正常。F12(“转到声明”)适用于Logger导入,但在所有jmime导入上中断。
哦,还有一件事,如果我转到“Projects”窗口中的“Packages”视图,则会出现“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没有提出任何东西,但我不确定如果缺少依赖项jar会不会出现)。
有人有任何想法吗?