Scala Intellij编译失败:";已定义为;
我有一个scala项目,当从命令行使用SBT时,它可以很好地编译、运行和测试。但是,在intellij中构建项目时,项目中的每个类似乎在事件日志中都有此错误,导致构建失败:Scala Intellij编译失败:";已定义为;,scala,intellij-idea,sbt,Scala,Intellij Idea,Sbt,我有一个scala项目,当从命令行使用SBT时,它可以很好地编译、运行和测试。但是,在intellij中构建项目时,项目中的每个类似乎在事件日志中都有此错误,导致构建失败: SendCommandToService is already defined as case class SendCommandToService case class SendCommandToService(service: String, commandName: String, keys: Array[String
SendCommandToService is already defined as case class SendCommandToService
case class SendCommandToService(service: String, commandName: String, keys: Array[String], values: Array[String])
^
这意味着在类路径中有两个具有相同包和类名的编译类。一个由sbt编译,一个由IntelliJ编译 以下其中一项应能够解决该问题:
我有一个类似的问题反复出现,无论是在想法之内还是之外:简单的SBT
事实证明,CVS将一些*.scala文件的副本存储在子目录CVS/Base中,SBT显然试图编译该子目录。当我删除CVS子目录时,问题消失了。我也有同样的问题,@Max是对的,与编译的类有冲突,但提供的解决方案对我不起作用。事实证明,我正在使用sbt idea生成idea项目结构,作为sbt导入上的一个解决方案,在我写这篇文章时,这个问题还没有解决
为了修复它,我必须删除模块设置中与
src\u managed/main/controller
冲突的src\u managed/main
,因为存在错误。因此,请仔细检查您的模块源文件夹,确保没有子文件夹与已声明为源的父文件夹冲突。对我来说,原因是myproject/src
和myproject/src/main/scala
都标记为源文件夹。因此,由于上述错误,intellij未能构建myproject/src/main/scala
。从myproject/src
取消标记源代码(在intellij中,文件->项目结构,选择myproject模块,在“源代码”选项卡中选择src文件夹,在“添加内容根目录”窗格中将其从源代码中删除)解决了问题。希望这有帮助。在我的例子中,问题是protobufIdea插件:
如果您以前编译过该项目,您应该首先运行“sbt clean”。我将把我的添加到列表中,以防其他初学者犯下这个错误:我通过执行
cp Foo.scala Foo save.scala
临时“保存了我的进度”,忘记了sbt将尝试编译目录中的所有.scala
文件
(我不知道,我想我在考虑编程语言,其中任何没有显式地include
d的文件都被忽略了…)
当然,因为主文件和“临时备份”文件都定义了相同的类。。。是的。您的项目中是否有其他文件中包含
SendCommandToService
在我的例子中,即使在同一个文件中,这也会起作用。通过在Idea中更改ScalaTest模板配置,问题得以解决。我选择
使用sbt
,禁用打印信息
,在启动前删除构建
我喜欢使用SBT对特定模块进行清洁/包装/测试。在测试中,我也使用混合的Java/Scala类(但我将编译顺序替换为Java,而不是Scala
)
至少现在我可以在IDE上进行测试而不会出现这个错误
PS:现在我禁用使用sbt
。我的测试很好(但我不确定它们是否有效)。
PPS:编译前不会运行新测试。删除内部版本(或者禁用
使用sbt
)是不利的。但是这个额外的构建导致了重复应用的问题,正如我想的那样你们试过构建->重建项目吗?是的,我试过了。谢谢。是的,这在Scala+Java混合项目中发生了。这发生在我将项目从src
移动到src/main/Scala
时。我遇到了这个问题,因为我在SBT中定义了一个生成源代码的任务;IntelliJ不知道在编译过程中运行这个,或者生成的代码是在target/scala-2.11/src_管理下的,所以我不得不手动将其添加为源路径,并且在这样做时犯了将父文件夹和子文件夹都标记为源的错误,如上所述。如果文件夹是蓝色的,您知道它已被标记为源代码。在我的情况下,这是根本原因,顺便说一句,scala和java src都不会在我的IDE中导致此错误。使用SBT并在IntelliJ之外播放,投票支持“SBT clean”,这最终为我解决了问题(虽然有一次我也降级了Scala 2.11-->2.10.4)。@JohnLockwood我仍然有这个问题,我已经禁用了缓存,执行sbt clean
,sbt compile
,但我的简单脚本仍然接收到一个“已定义为对象”的命令..我甚至重命名了对象,我的IntellIJ仍然给我运行上一个对象的选项。谁在没有评论的情况下否决了我的答案?可能是插件开发人员。:)
object traitdemo{
object Ex1{
...
}
}
object otherdemo{
object Ex1 {
...
}
}