84

I've got a scala project that compiles, runs and tests fine when using SBT from the command line. However, when building the project in intellij, it seems every class in the project has this error in the event log, causing the build to fail:

SendCommandToService is already defined as case class SendCommandToService
case class SendCommandToService(service: String, commandName: String, keys: Array[String], values: Array[String])
       ^
4

13 回答 13

159

对我来说,原因是两者都myproject/srcmyproject/src/main/scala标记为来源。myproject/src/main/scala因此,由于上述错误,intellij 无法构建。Unmark Source from myproject/src(在 intellij,File->Project 结构中,选择 myproject 模块,在 Sources 选项卡中选择 src 文件夹,在“Add Content Root”窗格中将其从 Source 中删除)解决了这个问题。希望这可以帮助。

于 2014-12-08T05:40:46.497 回答
41

这意味着在您的类路径中找到了两个具有相同包和类名的编译类。一个由 sbt 编译,一个由 IntelliJ 编译。

以下其中一项应该能够解决该问题:

  1. 尝试使用sbt-idea生成 IntelliJ .iml 文件,而不是直接导入。
  2. sbt clean 在点击 Build -> Rebuild in IntelliJ 之前
  3. 使用 IntelliJ 重建时,确保 sbt 没有运行
于 2013-06-02T23:34:57.807 回答
9

我今天在 IntelliJ 2021.2.1 上遇到了这个问题,根据这个页面,IntelliJ 的 Scala 增量编译器存在一些问题,因此解决方案是在 Preferences -> Build 中将“Incrementality Type”从“IDEA”更改为“Zinc” , 执行, 部署 -> 编译器 -> Scala 编译器

于 2021-09-21T20:08:42.400 回答
5

我有同样的问题,@Max 是对的,与编译的类有冲突,但提供的解决方案对我不起作用。事实证明,我正在使用 sbt-idea 生成 IDEA 项目结构,作为 SBT 导入中Intellij IDEA 14 + scala 插件错误的解决方法,在我写这篇文章时还没有修复。

为了修复它,由于sbt-idea 错误,我不得不删除与模块设置中的src_managed/main/controller冲突。因此,请仔细检查您的模块源文件夹,并确保您没有与已声明为源的父文件夹冲突的子文件夹。src_managed/main

于 2014-11-15T18:35:05.513 回答
4

您需要将“设置 -> 构建、执行、部署 -> Scala 编译器 -> 编译顺序”从“混合”更改为“Java 然后 Scala”。如果你之前编译过项目,你应该先运行“sbt clean”。

于 2018-02-24T10:05:17.283 回答
2

我在 Idea 内部和外部都反复遇到过类似的问题:普通 SBT。

事实证明,CVS 将一些*.scala文件的副本存储在子目录CVS/Base中,SBT 显然试图编译这些文件。当我删除 CVS 子目录时,问题就消失了。

于 2014-09-15T08:54:57.947 回答
2

对我来说,解决方案是仔细检查 IntelliJ 中每个模块中的源文件夹。

File > Project Structure > Modules对于每个模块,请仔细检查是否Source Folders仅包含您想要的文件夹,例如src/main/scala,并且不包含任何生成的源(例如target/scala-2.12/src_managed/main.

于 2021-12-01T19:29:27.387 回答
1

在我的情况下,通过更改 Idea 中的 ScalaTest 模板配置解决了问题。我在启动前选择use sbt、禁用print info、删除构建。

我喜欢使用 SBT 对特定模块进行清理/打包/测试。我还在测试中使用了混合的 Java/Scala 类(但我将编译顺序替换为Java than Scala)。

至少现在我可以从 IDE 进行测试而不会出现此错误。

PS:现在我禁用use sbt. 我的测试工作正常(但我不确定它们是否会工作)。PPS:新测试未在编译前运行。删除构建(并且可能是禁用use sbt)是不利的。但是我认为这种额外的构建会导致复制问题

于 2020-12-17T16:38:32.903 回答
1

File -> Invalid Caches/Restart 对我有用。这里的所有其他答案都没有。

于 2021-09-03T17:50:32.267 回答
1

您的项目中是否还有其他文件SendCommandToService

  1. 您可以尝试将其重命名为其他名称,看看是否有效

  2. 如果要保持相同的名称,可以将它们放入单独的包中。

  3. 或者将它们放在不同的封装对象中

object traitdemo{
 object Ex1{
   ...
  }
}
object otherdemo{
  object Ex1 {
    ...
   }
}

即使在同一个文件中也可以使用

于 2020-08-04T21:43:31.867 回答
0

sbt 编译之后,我必须将该文件夹标记为Generated Sources Root,因为我需要这些文件进行编译。

于 2016-10-31T08:12:26.837 回答
0

我只是将我的添加到列表中,以防其他人犯了这个初学者错误:我暂时“保存了我的进度” cp Foo.scala Foo-save.scala,忘记了 sbt 会尝试编译.scala目录中的所有文件。

(我不知道,我想我正在考虑编程语言,其中任何未明确included 的文件都被忽略了......)

当然,因为主文件和“临时备份”文件都定义了相同的类......是的。

于 2018-07-31T14:08:34.080 回答
-1

就我而言,问题在于 protobuf Idea 插件

  1. 删除idea protbuf插件。
  2. 关闭想法
  3. 删除所有与想法相关的文件夹(.idea 和 .idea_modules)
  4. 打开 Idea 并再次导入项目。
于 2016-06-04T07:36:49.827 回答