平台: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 是否会这样做)。
那么,有人有任何想法吗?
mvn clean install
首先,您应该尝试 File | Invalidate Caches
,如果没有帮助,请删除 IDEA system directory。然后重新导入 Maven 项目,看看是否有帮助。
在某些奇怪的情况下,编译的类可能会报告错误的信息并混淆 IDEA。使用 javap 验证此 jar 中的类是否报告了正确的名称。
以下技巧为我解决了这个问题:
右键单击代码编辑器
悬停在 Maven 上并展开
点击重新导入
我的想法版本是 12.0.4
View -> Tool Windows -> Maven Projects
,然后单击循环箭头图标。
上述解决方案都不适合我。所做的是手动删除 main.iml 文件,它突然起作用了。
在同一问题 here 的另一个答案中提到了这一点,但仅此一项就为我解决了这个问题。我在 IntelliJ 之外的单独终端中进行所有构建。因此,缓存需要为 IntelliJ 应用程序设置适当的权限才能读取它们。
从项目的根文件夹运行它。
$ mvn -U idea:idea
对于 Gradle 用户:
您可能需要将您的项目与您的 build.gradle
文件同步。
您可以右键单击“项目”窗格下的 gradle 文件来执行此操作,但这似乎对我没有任何作用(我怀疑我的版本中有错误)。您会知道这是否会发生,因为它不会启动您将等待的任何 IntelliJ 任务。请改为open up the Gradle Tool pane,然后点击同步(刷新)按钮。这对我有用,而使缓存无效并重新启动没有。
我自己的情况:我正在使用带有 Gradle 的 Scala 项目并且必须这样做。
View > Tool Windows > Gradle
mavenCentral() could not be resolved
,直到我添加了 jUnit 配置(我通过创建一个新的 Gradle 项目将整个项目移植到 Gradle,然后复制所有源文件)。
一个额外的步骤,当我执行 File -> Invalidate Caches 并重新启动 IDE 时,打开一个项目。它在右上角弹出一个 toastbox 询问我是否启用自动导入并解决了问题。
项目结构中不一致/重复的模块名称对我来说是导致此问题的原因。
转到文件-> 项目结构-> 模块在单击具有红色下划线的模块转到“依赖项”选项卡确保红色的依赖项实际上存在于依赖项列表中。如果不是,请重命名它们以匹配现有的依赖项名称
当 IntelliJ 未正确关闭并因此无法正确保存重命名的模块名称时,可能会发生这种情况。
要检查的另一件事:确保不重复依赖项。在我的情况下,我发现表现出这种行为的模块配置错误如下:它依赖于另一个模块,并且依赖于另一个模块生成的 jar。这意味着重复引用的每个符号,并且是模棱两可的。
有固定的发布吗?由于 2013 年的“编译器大修”,最初影响 v11/12 的问题出现。截至 2014 年底,在 Jira 中讨论了相关问题。http://youtrack.jetbrains.com/issue/IDEA-98425
同样在 Jira IDEA-98425 上被标记为已修复但未经验证(在 v12.0.3 上)。以下解决方法均无法帮助解决 Windows 上版本 13.1.1 的“无法解析符号”问题
一个。删除 .IdealIC13 文件夹(然后,File \ Invalidate Caches / Restart)
湾。在 Maven 项目窗口中,
b.1 mvn -U idea:idea –〉执行这个maven目标假设重新加载依赖项。这在上一个工作,但自上次 FRI 以来,执行这个 maven 目标失败,因为它试图重新编译项目(当然它失败为“无法解析符号”,这就是我试图通过首先运行这个命令来解决的问题) mvn -version — 显示引用 3.2.5 的 maven 版本并且它正在工作
b.2 只需右键单击项目,然后重新导入
b.3 文件\使缓存无效/重新启动
C。尝试启用和禁用此设置:文件->设置-> Maven->导入->“使用 maven3 导入项目”
d。 Settings \ Maven \ Multiproject build fail policy = Fail at end(而不是默认)
没有任何效果。 Maven 上的 IntelliJ 支持发生了什么变化。
https://youtrack.jetbrains.com/issue/IDEA-99302
根据 JetBeans 发布历史,https://www.jetbrains.com/company/history.jsp
IntelliJ v14 2014 年 11 月
IntelliJ v13 2013 年 12 月
我假设 v12 已修复(尽管未经验证)将包含在后续版本中。任何人与哪个 IntelliJ 版本有类似问题?请分享你的经验。 IntelliJ maven 支持似乎坏了。
按“shift”两次>“重新导入所有 Maven 项目”总是对我有用。
https://i.stack.imgur.com/DI0ki.png
其他答案都不适合我。我的导入没有得到解决,因为 IntelliJ 指向了错误的 .m2 文件。
IntelliJ 版本:IntelliJ Idea 2018.1.5
我的 .m2 目录的位置指向了错误的路径。我所做的只是将 IntelliJ 重新指向正确的 .m2 目录并进行更新。
首先,进入:文件->设置->构建、执行、部署->构建工具->Maven
我不得不将用户设置文件:和本地存储库:更改为我的 .m2 目录的正确位置。
在此之后转到:文件->设置->构建、执行、部署->构建工具->Maven->存储库
并单击更新按钮。
我的项目结构:
src -> main -> scala -> mypackages
什么有效:
右键单击 scala
文件夹,然后单击“将目录标记为源根”。
我嫉妒所有通过 File / Invalidate 缓存解决问题的人。我只是花了几个小时尝试这个问题的所有内容以及网络上的其他一些问题。
魔法菜单项没有为我做这件事,所以我自己通过 nuking %USERPROFILE%\AppData\Local\JetBrains\IntelliJIdea2020.3\caches
使缓存无效
一旦我这样做并重新启动 IntelliJ (2020.3),索引就会重建,我的错误就消失了。
如果你的 maven 项目是一个多模块项目,请检查一些模块是否被 intellij 忽略。
点击View -> Tool Windows -> Maven Projects,检查是否有一些模块被忽略(忽略的模块是灰色的,例如下图中的gs-multi-module)。
https://i.stack.imgur.com/bgaro.png
右键单击被忽略的模块并选择 Unignore Projects。
https://i.stack.imgur.com/HhBEC.png
然后等待intellij完成索引,之后就可以工作了。
我在使用 Maven Importer JDK 时遇到了问题——它以某种方式将自己切换到 JDK 11,但 Maven Project reload 仅适用于 JDK 8。
https://i.stack.imgur.com/m4AI6.png
对于 Gradle 项目:
退出 IntelliJ IDEA 删除
是的,听起来您必须创建包含所需 JAR 的库,并将它们作为依赖项添加到您的模块中。
对于另一种选择。
我在使用JDK7_07时也遇到了这个问题。我在这里尝试了所有答案(除了删除 IDEA 系统目录)。但是,我仍然遇到了问题。所以我所做的是:
安装最新的JDK(它是JDK7_45),并将Intellij的JDK设置为新的,它可以工作。
重新导入项目对我有用。右键单击项目 -> Maven -> 重新导入
当我执行 File -> Invalidate Caches 并重新启动 IDE 时,打开一个项目。它在右上角“检测到 Maven 更改”上显示了一个对话框,并提供了导入和启用自动导入的选项。即使在这里导入项目后,我也遇到了同样的问题。上述步骤解决了问题。
建议的解决方案不起作用。我不得不通过右键单击 pom => maven => unignore 项目来取消忽略几个项目。
然后经过
mvn clean install -T 6 -DskipTests
在控制台中,IntelliJ 又高兴了。不知道这些项目是如何被忽视的......
就我而言,我正在尝试从 IntellijIdea 打开一个 Spring Boot 项目,但遇到了同样的问题,例如无法导入所有与 Spring 相关的文件。
然后我做了:
文件 -> 关闭项目 -> 导入项目 -> 从外部模型导入 -> 选择 Gradle -> 下一步 -> 从文件位置选择项目 -> 完成
现在一切正常。
我在这里看到了很多答案,但我终于找到了这个解决方案。它可能对像我这样的人有用。
我刚遇到这个问题,它不会消失。我最终清除了 ~
中的 IntelliJ 配置目录,并从头开始重建了我的 IntelliJ 项目。 (与花费一个小时试图解决缓存文件等问题相比,这最终只花了大约 15 分钟。)
请注意,我的猜测是最初的问题是由 javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html
之类的东西引起的(注意:截至 2018 年,该链接已失效,但archive.org 在首次编写此答案时有 a copy of the page。)或导致 Java 崩溃的磁盘空间/内存问题。 IntelliJ 似乎只是被损坏了。
使我的缓存无效并重新启动后;并确认我的 maven 设置没问题,我仍然看到我明确设置为依赖项的模块的“无法解析符号”。原来我把它设置为错误的范围。
您可以通过右键单击您的模块并选择打开模块设置来检查。单击依赖项选项卡并验证您的不可解析依赖项的范围是否设置为编译。
打开“设置” 搜索“Maven” 点击“Maven”下的“Ignored Files” 取消选中 pom.xml 文件包含缺少的依赖项 点击“OK” 点击 File -> Invalidate Caches/Restart... 点击“Invalidate and Restart”
在 IntelliJ IDEA 2020.3
中,选择:
File > Invalidate Caches / Restart... > Invalidate and Restart 当提示下载预建共享索引时:不要导入共享索引:关闭对话框或选择更多操作 > 不再显示
就我而言,仅删除了 buildDir。在这种情况下,File | Invalidate Caches
不起作用。
当我在 File | Invalidate Caches
之前执行 Build | Make Project
时,一切正常。
上述解决方案都没有为我解决。我有同样的问题,代码编译得很好,但 IntelliJ 显示它找不到导入。即使 IntelliJ 建议首先从代码完成中导入。
我的解决方案是将所有内容移至默认包,删除 com.foo.bar
包,然后重新创建它并将所有内容移回。