Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntelliJ inspection给出了;无法解析符号“;但仍然编译代码_Java_Maven_Intellij Idea_Intellij Inspections - Fatal编程技术网

Java IntelliJ inspection给出了;无法解析符号“;但仍然编译代码

Java IntelliJ inspection给出了;无法解析符号“;但仍然编译代码,java,maven,intellij-idea,intellij-inspections,Java,Maven,Intellij Idea,Intellij Inspections,平台:IntelliJ社区版10.0.3 SDK:jdk1.6.0_21 操作系统:Windows7 所以我和IntelliJ有一个奇怪的情况,这让我完全困惑。我设置了一个Maven项目,并将log4j作为依赖项添加到pom.xml文件中。IDEA检查运行良好,我的单元测试全部编译并运行 然后,我使用mvn install:install文件将hunnysoft的jmime库添加到本地maven存储库中,如下所示 mvn install:install-file -Dfile=jmime.jar

平台:IntelliJ社区版10.0.3
SDK:jdk1.6.0_21
操作系统:Windows7

所以我和IntelliJ有一个奇怪的情况,这让我完全困惑。我设置了一个Maven项目,并将log4j作为依赖项添加到pom.xml文件中。IDEA检查运行良好,我的单元测试全部编译并运行

然后,我使用mvn install:install文件将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依赖项之上)

现在来看看奇怪之处。IntelliJ的意图机制在maven pom文件中拾取并识别记录器导入。但是,对于所有hunnysoft导入,它报告:“无法解析符号'ByteString/Field/FieldBody',但是Build=>Compile'StackOverflowQuestion.java'正确编译所有内容,并且我为该类创建的单元测试运行良好(尽管意图也将调用create()标记为问题区域)

因此,IntelliJ不知何故忽略了意图子系统的jmime.jar文件。我很困惑,因为log4j依赖项工作正常,所有的编译和运行都正常。F12(“转到声明”)在记录器导入上工作,但在所有jmime导入上中断

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

检查的类路径似乎被破坏了,但在Settings=>intentials |编译器区域的任何地方似乎都没有相应的设置(这不是我所期望的设置,我相信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文件中没有看到任何异常

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.
我最好的猜测是,问题可能是缺少依赖性问题。但是AFAIKJMIME应该是自包含的(JarAnalyzer没有提供任何东西,但是如果缺少依赖项jar,我不确定它会提供什么)


那么,有人有什么想法吗?

是的,听起来您必须创建包含所需JAR的库,并将它们作为依赖项添加到模块中

首先,您应该尝试
文件|使缓存无效
,如果没有帮助,请删除。然后重新导入Maven项目,看看是否有帮助


在某些奇怪的情况下,编译的类可能会报告错误的信息并混淆概念。使用验证来自这个jar的类是否报告了正确的名称。

我刚刚遇到了这个问题,它不会消失。我最终清除了
~
中的IntelliJ配置目录,并从头开始重建了我的IntelliJ项目。(这最终只花了大约15分钟,而不是花一个小时来解决缓存文件等的问题。)


请注意,我的猜测是,最初的问题是由于intellij idea.html中打开的文件太多(注意:截至2018年,该链接已失效,但archive.org在首次编写此答案时就已经失效)或磁盘空间/内存问题导致Java崩溃。IntelliJ似乎刚刚损坏。

另一件需要检查的事情:确保依赖项不重复。在我的例子中,我发现表现出这种行为的模块被错误地配置为:它依赖于另一个模块,它依赖于另一个模块生成的jar。这意味着每一个重复引用的符号都是不明确的。

还有一个步骤,当我执行文件->无效缓存并重新启动IDE时,打开一个项目。它在右上角弹出了一个烤箱,询问我是否启用自动导入,这就解决了问题。

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

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

我的想法版本是12.0.4

作为另一种选择

我在使用JDK7_07时也遇到了这个问题。我在这里尝试了所有答案(除了删除IDEA系统目录)。但是,我还是有问题。所以我所做的是:


安装最新的JDK(它是JDK7_45),并将Intellij的JDK设置为新的JDK,它就会工作。

在使我的缓存无效并重新启动后;确认我的maven设置是正确的,我仍然看到一个模块的“无法解析符号”,我肯定已经设置为依赖项。结果我把它设置到了错误的范围


您可以通过右键单击模块并选择“打开模块设置”进行检查。单击dependency选项卡并验证不可解析依赖项的作用域是否设置为Compile

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


当我执行File->invalidatecaches并重新启动IDE时,打开一个项目。它在右上角显示了一个对话框“Maven changes detected”,并提供了导入和启用自动导入的选项。即使在这里导入项目之后,我也遇到了同样的问题。上述步骤解决了问题。

是否已发布固定版本?由于2013年的“编译器大修”,该问题最初影响到v11/12。在讨论相关问题后,我
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.
src -> main -> scala -> mypackages
$ mvn -U idea:idea
mvn clean install -T 6 -DskipTests