IntelliJ中Groovy类出现“Class already exists”错误

8
在IntelliJ(2016.2和之前版本)中,我们的Groovy类会出现错误,显示为红色,并提示"class already exists"。 我觉得我们可以排除桩生成的原因,因为这个功能已经被禁用。
很可能是我们的配置引起的:我们在一个jar包中包含了编译后的Groovy(和Java)类,并将其注册为依赖项。
依赖项MyProduct.jar包含com.mycompany.MyGroovyClass 我们的源代码中也包含com.mycompany.MyGroovyClass 如果使用测试范围注册依赖项,则该错误会消失,但在所有其他范围中都会出错。
然而,在我们的结构中,我们有必要在编译范围内包含已编译的类,以避免每个开发人员都需要编译所有的类(我知道有一个后台编译的能力,但我们的配置不允许这个功能正常工作)。
我们的com.mycompany.MyJavaClass没有任何错误,它在源代码和MyProduct.jar中都存在。
你有什么解决方案?
4个回答

7
我们遇到了相同的问题,看起来是IntelliJ注册了Java类和Groovy类,导致出现了这个消息(顺便说一下,我们使用的是Maven项目)。
所以我们最终进入目标文件夹 -> 右键单击 -> 标记目录为 -> 排除。然后,这个设置将保存在IML文件中,就不会再次出现此问题。
希望这对你也有用!祝好。

5
您可能还需要在目标文件夹下进一步进入几个目录,并找到“main”和“test”目录,将它们也标记为排除的目录。在我的项目中,即使它们的父目录已经被标记为排除的目录(使用Intellij IDEA Ultimate 2017.1),它们仍然会被自动标记为“generated-sources”。 - David
1
每次运行mvn clean install时,我都必须将目录标记为排除,因为clean install会擦除并重新创建目标文件夹。 - IamVickyAV

5

我正在使用 gmavenplus-plugin:1.5。 将target/generated-sources/generated-sources/main标记为“排除”后,错误消失了。我甚至执行了“使缓存无效并重新启动”,它仍保留了该设置。这太棒了。Intellij 2017.1.5


听起来你描述的问题是存根没有被忽略的问题(#58)。这已在1.6版中修复。 - Keegan
我没有使用任何Intellij插件,只是在pom.xml中定义了插件。我想你指的不是pom.xml中的插件版本。那并没有帮助。 - brownfox
我指的是GMavenPlus 1.6。我将目标重命名以匹配IntellliJ的期望。 - Keegan

1
我们有两种方法来解决这个问题:
  1. 排除存根目录

目标文件夹 -> 生成的源码 -> Groovy存根 -> 右键单击主文件夹 -> 标记目录为 -> 排除

  1. 从gmaven插件中删除generateStubs目标

从gmavenplus插件中删除<goal>generateStubs</goal>


0

请确保将src文件夹标记为源根目录,并对test文件夹执行相同操作

然后删除目标文件夹(很可能会被标记为黄色),不用担心,它不会删除您项目中的任何代码

如果问题仍然存在,请继续前往“文件” -> “无效缓存/重启”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接