IDEA JetBrains IntelliJ - 'make' 上的编译错误,但使用 Maven 编译时很好,并且 IntelliJ 在类文件中没有报告错误
Posted
技术标签:
【中文标题】IDEA JetBrains IntelliJ - \'make\' 上的编译错误,但使用 Maven 编译时很好,并且 IntelliJ 在类文件中没有报告错误【英文标题】:IDEA JetBrains IntelliJ - Compile error on 'make' but fine when compiled using Maven and no errors reported by IntelliJ in the class fileIDEA JetBrains IntelliJ - 'make' 上的编译错误,但使用 Maven 编译时很好,并且 IntelliJ 在类文件中没有报告错误 【发布时间】:2011-04-10 06:46:35 【问题描述】:所以我在 IntelliJ 中有一个 maven 模块(模块-A)。我最近将一些类从它移到另一个新的 maven 模块(模块-B)并添加了一个依赖项。完成此操作后,我还修改了已移动类之一的方法的签名(现在在模块-B 中)。
我重新导入了 pom,以便 IntelliJ 能够获取依赖项更改并确保受影响文件的所有 Java 导入再次正确。现在,当我尝试运行我的 webapp(这取决于两个模块)时,我在模块 A 中的一个类中调用模块 B 中类的修改方法时遇到编译错误。
错误消息基本上是说该方法不存在,但认为旧方法仍然存在!我单击“make”错误,它会将我带到模块 A 中调用修改后的方法的类中的行……奇怪的是,IntelliJ 知道它在文件中很好。即该方法没有像编译错误通常那样用红色下划线,但类文件名是:(
我使用“mvn install”从命令行编译它(还安装了模块-B),一切都成功了。我已经删除了模块-A 和模块-B 目标中的类目录,并且还使 IntelliJ 的缓存无效并重新启动...仍在发生...有什么想法吗?
【问题讨论】:
您是否重建并重新部署了整个项目? 是的,尝试在 IntelliJ 中多次重建整个项目并不断收到相同的错误...:( 清除 IntelliJ 缓存有帮助吗? 【参考方案1】:我发现这可能会有所帮助:
文件 -> 使缓存无效
【讨论】:
请谨慎执行此操作。请参阅此页面上的警告:jetbrains.com/idea/help/cleaning-system-cache.html 恕我直言,@Noremac 的评论应该包含在答案中。【参考方案2】:Maven 项目 -> 重新导入应该会有所帮助。
【讨论】:
谢谢 vibneiro 但我已经这样做了,并在问题中提到了这一点; “我重新导入了 pom,以便 IntelliJ 能够获取依赖项更改”【参考方案3】:我在同样的问题上花了几个小时。世界上所有的清洁都没有帮助。
我删除了项目中的 out 和 target 目录并重新编译 - 清除了它。
编辑:文件菜单下还有一个神奇的功能:“Invalidate Caches / Restart”这修复了一堆“intellij is confused”的问题。
【讨论】:
这对我有用。我认为 IntelliJ 会挂断以前版本的代码。刚刚浏览了所有模块目录并运行干净。一切都恢复正常了!mvn clean
和无效缓存和重启都不适合我 :(
这是为我解决的问题。谢谢。
我希望我能给你更多的积分,。我在这个问题上花了将近一个小时。该死!!!!【参考方案4】:
更改 IDEA(用户编译器 javac in-process)中的“Java 编译器”设置以解决问题。
【讨论】:
【参考方案5】:尝试mvn clean
你的项目和mvn install
你的项目B。
当您使用 Intellij 直接提供的 make 命令时,与 intelliJ 的 maven 集成有点问题。您应该直接使用 mvn 命令,或者从 maven 面板启动它们。
【讨论】:
抱歉忘了提,不幸的是我已经尝试过多次清理/安装这些模块及其父 pom,也执行了全新安装。 唯一对我有用的东西。真可惜,花了很长时间。 =(【参考方案6】:我遇到了一个非常相似的问题,让我发疯。
我的代码可以与我通常运行的 ant 任务一起正常编译,但它不会在 IntelliJ 中构建,抱怨“找不到符号等等”
事实证明,您可以为编译器添加“排除”文件。我的文件不知何故被添加到该列表中。
此列表位于文件 > 设置 > 编译器 > 排除 (IntelliJ 13)
【讨论】:
【参考方案7】:以下步骤应该可以解决这个问题:
-
删除 .IntelliJIdea12 / .IdeaIC12 旧于 c:/user/.../
使 Intelli 的缓存无效:文件 > 使缓存无效。
这会在启动时重新索引您的工作区并清除您的本地历史记录。在您执行此操作之前,请提交或备份您所有未提交的更改。
在您的工作区在建立索引后恢复后,请执行 maven 全新安装。
构建成功后,点击Maven Re-imports
这对我有用,我认为它也应该适用于其他有类似问题的人。
【讨论】:
【参考方案8】:所以今天早上刚刚说出来,一切正常!
昨晚我所做的是从模块 A 和模块 B 的父 pom 中打开一个新项目(intelliJ 项目)并成功构建它,可能会这样做,然后再次打开我的原始项目以某种方式修复它。 .虽然很烦人
【讨论】:
我最后也做了同样的事情。缓存不起作用。【参考方案9】:我看到的行为与原作者描述的类似。 Intellij 14 中的错误标记显示在编辑器的右侧,而在 13 中则更少。
如果使用 Scala 代替 Java,使用 SBT 代替 Maven,也会发生这种情况。
还注意到在加载第二个项目后会发生这种情况。第一个总是好的。 (经过多次试验和错误)认为这可能是由 Intellij 的内部缓存以某种方式损坏引起的。 “无效缓存”有时有效,有时无效。
我使用 Play 处理了许多项目!框架,他们使用不同版本的 Scala 和许多依赖项。 我假设缓存已损坏,因为 Intellij 使用的内部密钥不足以处理同一类、在不同 jar 中多次加载、具有不同签名的情况,这会导致编辑器错误而外部构建工作正常。
然后是“在 IntelliJ IDEA 中更改 sbt 项目的 Ivy 缓存位置?”帖子给出了分离常春藤缓存 SBT 和 Intellij 使用的想法,希望常春藤路径是内部缓存键的一部分。
TypeSafe 的 Paul Phillips 提供了“SBT extras”工具,在这里我找到了一种方法来指导 SBT 使用基于项目的 ivy home、缓存和 SBT 启动:
https://raw.githubusercontent.com/paulp/sbt-extras/master/sbt
声明 -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
如何配置 Intellij :见http://content.screencast.com/users/SemanticBeeng/folders/Snagit/media/ec8ec491-6d0c-4691-9598-916a63ba65ef/12.02.2014-08.59.png
然后对外部 SBT 构建进行相同操作以同步工作 :见http://content.screencast.com/users/SemanticBeeng/folders/Snagit/media/dcb287c4-200f-47f3-a937-42865675a22b/12.02.2014-09.01.png
终于摆脱了基于用户主页的 .ivy2 和所有内容。 为确保 Intellij 不使用此文件夹,我将其设为只读。 这是一个错误。如果你这样做,Intellij 似乎会默默地失败解析依赖项。
这解决了错误并相信它们不会再出现。 :-)
如果 Intellij 人听到这个消息:请使用来自 TypeSafe 的所有 Play Framework 模板测试您的版本(Scala、SBT、编辑器)。通过这种方式,问题很快就会显现出来。
【讨论】:
【参考方案10】:我刚刚遇到了一个类似的问题,让我发疯了。我已经完成了上述答案中提到的所有其他事情,因为我一直在使用 Intellij,但没有任何工作。最后我发现,在 Intellij 的 maven 项目部分,我的一个模块被标记为“忽略”,上下文菜单中的一个简单的 unignore 命令可以解决问题。
【讨论】:
【参考方案11】:在我的例子中,我手动将一个目录标记为“Test Sources Root”,但 IDEA 将它标记在父 Maven 项目上。在 File->Project structure...->Modules 中取消标记它解决了这个问题。
【讨论】:
【参考方案12】:如果您在 IntelljJ 外部构建时使用不同版本的 java,则可能会发生这种情况。我的 IntelliJ 有 java10,我在终端构建时使用的是 java8。将 java 版本更改为 IntelliJ 为我解决了这个问题。
【讨论】:
【参考方案13】:我有一个非常相似的行为。由于在“make”步骤期间不相关的 java 类中的错误,运行 (Scala-) 测试总是会失败。
事实证明,我包含了一个“全局”SDK 库,该库与项目中的一个依赖项发生冲突。仅在我从测试中删除“制作”步骤后,才会出现适当的有用错误消息。 然后我删除了重复的库,将 make 步骤重新添加到测试中,现在一切正常。
【讨论】:
【参考方案14】:我今天从 12 升级到 13 后遇到了这个问题。
后来我修复了问题,因为我为 Project 和 Module 使用了相同的名称,并且看起来 Intellij 允许这样做但无法正确处理。
不知道为什么设置会影响编译,尽管在 java 编辑器中没有错误。应该是版本 13 中的错误。
【讨论】:
【参考方案15】:从 IntelliJ 12 升级到 13 后,我遇到了类似的问题。在多次卸载和重新安装(多个 IntelliJ 版本)、多次清理和 .m2 存储库清除之后,我终于弄清楚了我的问题。
在我的 intelliJ 设置中,无法连接到我的主 POM 文件中提到的存储库。这反过来又是我的 pom 文件中提到的备用存储库。 一旦 POM 指向正确的存储库,我的所有类的编译问题都已解决。
要检查您的存储库是否正在连接,请转到文件 -> 设置 -> Maven -> 存储库
在这里,您的索引 maven 存储库应该已成功连接。如果不是,则 intelliJ 将无法解析大多数 3rd 方和模块依赖项。
【讨论】:
【参考方案16】:不好意思说,不过我们也有这个问题,不过是因为我们的包名有误。
在为新项目创建包时,我不小心创建了一个名为“org.package”的包。
我的项目然后有一个目录结构,如:
/src/main/java/org.package/
这对 IntilliJ 造成了各种破坏。
在文件系统上创建正确的文件夹结构后,IntelliJ 运行良好。
/src/main/java/org/package/
注意 /org.package/ 与 /org/package/ 的区别
【讨论】:
【参考方案17】:解决方法是我把它改成 javac 而不是 Ajc,我当然根据你的 jdk 版本放了 1.8。
由于某种原因,当我使 intellij 失效并重新启动时,它被设置为默认值!
我的版本是
【讨论】:
【参考方案18】:这发生在我身上...解决了什么问题是意识到源目录中有一个额外的 main.iml 文件。删除它会立即使编译错误消失。
【讨论】:
【参考方案19】:以上答案都不适合我。
就我而言,我最终必须为模块创建一个显式的 Maven 运行配置(命令行为“全新安装”),然后运行它。
在Run > Edit Configurations
【讨论】:
【参考方案20】:-
关闭项目
进入项目文件夹,删除idea项目文件和.iws文件
运行 mvn idea:idea
重新启动项目。
即使我们运行文件 -> 使缓存无效
,似乎也可以保留旧的项目依赖项而不清理【讨论】:
【参考方案21】:设置正确的 Java SDK 可以解决问题
右键单击项目并选择“打开模块设置” 在平台设置下检查您是否拥有正确的 Java SDK 检查模块下的 SDK 从“构建”菜单重新构建项目【讨论】:
【参考方案22】:删除安装目录。
删除以下目录:
~/.config/JetBrains/
~/.cache/JetBrains/
~/.local/share/JetBrains/
这将删除所有配置以及 jetbrains 工具的安装,无论是 IDEA、goland 等。 现在从头开始安装所有内容。 这是它对我有用的唯一方法
【讨论】:
以上是关于IDEA JetBrains IntelliJ - 'make' 上的编译错误,但使用 Maven 编译时很好,并且 IntelliJ 在类文件中没有报告错误的主要内容,如果未能解决你的问题,请参考以下文章
JetBrains IntelliJ IDEA 安装 lombok
xml .gitignore为JetBrains IntelliJ IDEA设置样本
如何在 Android Studio / JetBrains IntelliJ IDEA 中编辑模板?