平台: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 => Compile 'StackOverflowQuestion.java'正确编译一切,我为这个类创建的单元测试运行良好(尽管意图标记调用create()作为一个问题区域太)。

IntelliJ忽略了意图子系统的jmime.jar文件。我很困惑,因为log4j依赖项工作得很好,所有东西都编译和运行得很好。F12(“Go To Declaration”)在Logger导入上有效,但在所有jmime导入上失效。

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

似乎检查的类路径被破坏了,但在Settings => Intentions | Compiler区域中似乎没有对此进行设置(并不是说我期望有这样的设置,我相信IDEA应该已经知道基于pom文件和JDK的正确类路径)。

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

这是舱单。MF来自jmime jar文件。

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.

我在这个罐子文件里没发现什么异常。

我最好的猜测是,这个问题可能是一个缺失的依赖问题。但是AFAIK jmime应该是自包含的(JarAnalyzer不会提供任何东西,但我不确定如果缺少一个依赖jar,它是否会提供任何东西)。

有人有什么想法吗?


当前回答

在我的例子中,一位同事将Lombok添加到项目中,我必须安装Idea Lombok插件。在您的情况下,它可能是其他需要插件的东西。

其他回答

一个额外的步骤,当我做文件->无效缓存和重新启动IDE,打开一个项目。它弹出了一个toastbox在右上角,询问我是否启用自动导入,这解决了问题。

重新导入项目对我来说很有效。 右键单击项目-> Maven ->重新导入

当我做文件->无效缓存和重新启动IDE,打开一个项目。它在右上方显示了一个对话框“检测到Maven更改”,并提供了导入和启用自动导入的选项。即使在将项目导入到这里之后,我也遇到了同样的问题。上述步骤解决了问题。

在我的例子中,一位同事将Lombok添加到项目中,我必须安装Idea Lombok插件。在您的情况下,它可能是其他需要插件的东西。

修复已经发布了吗?出现的问题最初影响v11/12由于“编译器检修”早在2013年。2014年底在Jira就相关问题进行了讨论。 http://youtrack.jetbrains.com/issue/IDEA-98425

同样在Jira上,IDEA-98425被标记为固定但未验证(v12.0.3)。以下解决方案均无法帮助解决Windows 13.1.1版本的“无法解析符号”问题

a.删除。idealic13文件夹(然后,文件\失效缓存/重新启动)

b.从Maven项目窗口,

b.1 mvn - u idea:idea - >执行这个maven目标假设重新加载依赖项。这在以前的工作,但自从上次FRI,执行这个maven目标失败,因为它试图重新编译项目(当然它失败为“无法解析符号”,这就是我试图通过运行这个命令在第一个地方修复)mvn -version -显示maven版本引用3.2.5,它正在工作

b.2只需右键单击项目,并重新导入

b.3文件\无效缓存/重新启动

c.尝试启用和禁用此设置:File -> Settings -> Maven -> Importing -> "Use maven3 to import project"

d.设置\ Maven \ Multiproject构建失败策略=结束失败(而不是默认)

没有什么工作。Maven上的IntelliJ支持发生了什么。

https://youtrack.jetbrains.com/issue/IDEA-99302

来自JetBeans发布历史,https://www.jetbrains.com/company/history.jsp

IntelliJ v14 2014年11月

IntelliJ v13 12月2013

我假设v12修复(尽管未经验证)将被合并到后续版本中。有人在哪个IntelliJ版本上有类似的问题吗?请分享你的经验。IntelliJ maven支持似乎中断了。

有时,当您创建像com.mydomain.something这样的包时,目录结构没有创建,只剩下一个名为com.mydomain.something的文件夹 “com.mydomain。在这种情况下,您应该创建目录结构,例如

com
|_mydomain
  |_something