IDEA JetBrains IntelliJ - 在'make'上编译错误,但在使用Maven编译时没有错误,IntelliJ在类文件中没有报告错误

问题描述 投票:39回答:19

所以我在IntelliJ中有一个maven模块(模块-A)。我最近将一些类从它移动到另一个新的maven模块(模块-B)并添加了一个依赖项。一旦我完成了这个,我还修改了一个移动类的方法的签名(现在在模块B中)。

我重新导入了poms,以便IntelliJ获取依赖项更改并确保受影响文件的所有Java导入再次正确。现在,当我尝试运行我的webapp(取决于两个模块)时,我在module-A中的类中遇到编译错误,调用模块-B中类的修改方法。

错误消息基本上是说该方法不存在但认为旧方法仍然存在!我点击'make'错误,它将我带到模块A中的一个类中,调用修改后的方法...奇怪的是,IntelliJ知道它在文件中很好。即该方法没有加下划线,就像编译错误通常一样,但类文件名是:(

我使用'mvn install'从命令行编译它(已经安装了模块-B)并且它都是成功的。我删除了模块A和模块B的目标中的classes目录,并且还使IntelliJ的缓存失效并重新启动......仍在发生......任何想法?

java maven-2 intellij-idea compilation
19个回答
40
投票

我发现这可能会有所帮助:

文件 - >使高速缓存无效


1
投票

我刚才有一个类似的问题让我疯了。我已经完成了上面答案中提到的所有其他事情,因为我已经永远使用了Intellij,但没有一个工作。最后我发现在Intellij的maven项目部分,我的一个模块已被标记为“忽略”一个简单的unignore命令,从上下文菜单中就可以了。


1
投票

在我的例子中,我手动将目录标记为“Test Sources Root”,但IDEA在父Maven项目上标记了它。在文件 - >项目结构中取消标记...->模块解决了问题。


1
投票

如果您在IntelljJ外部构建时使用不同版本的Java,则可能会发生这种情况。我的IntelliJ有java10,我在终端建设时使用java8。将java版本更改为IntelliJ为我解决了这个问题。


0
投票

我有一个非常相似的行为。由于“make”步骤中不相关的java类中的错误,运行(Scala-)测试总是会失败。

事实证明,我已经包含了一个“全局”SDK库,它与项目中的一个依赖项发生冲突。在我从测试中删除“make”步骤后,才会显示正确的有用错误消息。然后我删除了重复的库,重新添加了make步骤到测试,现在一切正常。


0
投票

从12升级到13后,我今天遇到了这个问题。

后来我解决了问题,因为我使用了Project和Module的相同名称,看起来Intellij允许这个,但无法正确处理它。

不知道为什么设置会影响编译,尽管java编辑器中没有错误。应该是版本13中的错误。


0
投票

从IntelliJ 12升级到13后,我遇到了类似的问题。经过多次卸载和重新安装(多个intelliJ版本),大量清理和.m2存储库清理后,我终于找到了我的问题所在。

在我的intelliJ设置中,我的主POM文件中提到的存储库无法连接到。这又是由于我的pom文件中提到的应付和备用存储库。一旦POM指向正确的存储库,我的所有类都解决了编译问题。

要检查您的存储库是否已连接到,请转到文件 - >设置 - > Maven - >存储库

在这里,您的索引maven存储库应该成功连接。如果不是,那么intelliJ将无法解决大多数第三方和模块的依赖关系。


0
投票

我很尴尬地说,但我们也有这个问题,但这是由于我们的包名错误。

在为新项目创建包时,我不小心创建了一个名为“org.package”的包。

然后我的项目有一个目录结构,如:

/双人床/卖弄/Java/org.package/

这会导致各种各样的IntelliJ破坏。

一旦在文件系统上创建了正确的文件夹结构,IntelliJ就能很好地工作。

/ SRC /主/ JAVA /组织/包/

注意/org.package/ vs / org / package /的区别


0
投票

修复是我把它变成了javac而不是Ajc,当然我根据你的jdk版本放了1.8。

出于某种原因,当我无效并重新启动intellij时,它被设置为默认值!

after i fixed i made it javac instead of Ajc

我的版本是

enter image description here


0
投票

这件事发生在我身上......是什么原因导致他们意识到源目录中有一个额外的main.iml文件。删除它会立即使编译错误消失。


0
投票

上述答案都不适合我。

在我的情况下,我不得不最终为模块创建一个显式的Maven运行配置(命令行为“干净安装”),然后运行它。

它在Run > Edit Configurations


21
投票

Maven项目 - >重新进口应该有所帮助。


16
投票

我在同一个问题上花了几个小时。世界上所有的清洁都没有帮助。

我删除了我的项目中的out和target目录并重新编译 - 清除了它。

编辑:文件菜单下还有一个神奇的功能:“无效缓存/重启”这修复了一堆“intellij is confused”问题。


7
投票

更改IDEA中的“Java编译器”设置(用户编译器javac进程中)以解决问题。


6
投票

尝试mvn clean您的项目和mvn install您的项目B.

当您使用Intellij直接提供的make命令时,maven与intelliJ的集成是一种错误。您应该直接使用mvn命令,或从maven面板启动它们。


4
投票

我碰到了一个非常类似的问题,这让我疯了。

我的代码可以使用我正常运行的ant任务编译好,但它不会在IntelliJ中构建,抱怨“找不到符号等等”

事实证明,您可以为编译器添加“Excluded”文件。我的文件以某种方式被添加到该列表中。

此列表位于文件>设置>编译器>排除(IntelliJ 13)


4
投票

以下步骤应解决此问题:

  1. 在c:/ user /.../下删除.IntelliJIdea12 / .IdeaIC12
  2. 使Intelli的缓存无效:文件>使缓存无效。 这会在启动时重新为您的工作区编制索引,并清除您的本地历史记录。在执行此操作之前,请提交或备份所有未提交的更改。
  3. 在索引编制后恢复工作区后,请执行maven clean install。
  4. 构建成功后,单击Maven Re-imports

这对我有用,我认为它也适用于其他类似问题。


2
投票

所以今天早上刚刚说出来,一切正常!

昨晚我做的是从模块A和模块B的父pom打开一个新项目(intelliJ项目)并成功地建立它,可能这样做然后打开我的原始项目再次修复它...非常讨厌虽然


2
投票

我看到的行为类似于原作者描述的行为。错误标记显示在Intellij 14中编辑器的右侧,而在13中则更少。

如果使用Scala而不是Java并使用SBT而不是Maven,也会发生这种情况。

还注意到在加载第二个项目后会发生这种情况。第一个总是好的。 (经过多次试验和错误)认为它可能是由Intellij的内部缓存变得有点腐败造成的。 “无效缓存”在某个时候有效,有时却没有。

我使用Play工作了很多项目!框架和他们使用不同版本的Scala和许多依赖项。我假设缓存变得腐败,因为Intellij使用的内部键不足以处理当在不同的jar中多次加载的同一个类具有不同签名时的情况,并且这导致编辑器错误,而外部构建工作正常。

那么“在IntelliJ IDEA中改变sbt项目的常春藤缓存位置?” post给出了隔离常春藤缓存SBT和Intellij使用的想法,希望常春藤路径是内部缓存键的一部分。

TypeSafe的Paul Phillips提供了“SBT extras”工具,在这里我找到了一种方法来指示SBT使用基于项目的常春藤家庭,缓存和SBT启动:

https://raw.githubusercontent.com/paulp/sbt-extras/master/sbt

declare -r noshare_opts =“ - Dsbt.global.base = project / .sbtboot -Dsbt.boot.directory = project / .boot -Dsbt.ivy.home = project / .ivy”

最后摆脱了基于.ivy2和所有内容的用户家。为了确保Intellij不使用此文件夹,我将其设为readonly。这是一个错误。如果你这样做,Intellij似乎无法解决依赖关系。

这解决了错误,并相信他们不会回来。 :-)

如果Intellij的人听到这个:请使用TypeSafe的所有Play Framework模板测试您的发布(Scala,SBT,编辑)。这种方式很快就会出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.