Intellij IDEA java.lang.NoSuchMethodError:scala.collection.immutable.$ colon $ colon.hd $ 1()Ljava/lang/Object

Daw*_*ruk 17 scala intellij-idea sbt intellij-13

我有以下功能:

def removeLast(list: List[Int]): List[Int] = list match {
  case List() => List()
  case List(x) => List()
  case x :: xs => x :: removeLast(xs)
}
Run Code Online (Sandbox Code Playgroud)

当我定义它并从sbt控制台使用它时一切正常.但是当我在Intellij IDEA中创建工作表并尝试运行它时,会出现以下异常:

java.lang.NoSuchMethodError:scala.collection.immutable.$ colon $ colon.hd $ 1()Ljava/lang/Object; at week5.A $ A26 $ A $ A26.removeLast(lists.sc8362409100671270508.tmp:30)at#worksheet#.#worksheet#(lists.sc8362409100671270508.tmp:33)

另外,当我将最后一行更改为:

case x :: xs => 1 :: removeLast(xs)}
Run Code Online (Sandbox Code Playgroud)

然后它工作.

问题可能是什么?

小智 28

我有这个问题.同意Andrzej,idea使用自己的编译器,所以你必须以某种方式禁用它.转到Settings-> Scala-> Worksheet并取消选中"在编译器进程中运行工作表".

  • 谢谢.工作就像一个魅力.这是"项目设置"下的"Scala".如"项目默认值"中所述,它有助于取消选中. (2认同)
  • 对于intelij 2017,我遵循了这一步`文件|其他设置|默认首选项|语言和框架| 斯卡拉| Worksheet` (2认同)

小智 6

在我的情况下,任何答案都没用.我仍然找到了一个适合我的解决方案..这是最新版本的问题.在pom.xml中升级到

  <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_2.11</artifactId>
         <version>2.2.4</version>
         <scope>test</scope>
  </dependency>
Run Code Online (Sandbox Code Playgroud)

帮助


Chr*_*rno 6

所以,虽然上面没有解决我的问题,但它与intellij有关.

基本上,它更喜欢Scala SDK来解析Class ::方法,而不是从依赖项加载.

我用了

-verbose:类

在JVM开关中让它显示它在哪里; 我立即抓住它,因为它正在尝试从Scala SDK加载类(它希望它从Maven中提取库).

我刚从项目设置中删除了Scala SDK,问题就消失了.到目前为止,我对Scala的体验(以及在混合Java环境中的体验)让我相信它有一些成熟的方法.这是一个基本的类/方法,我无法相信它在版本之间消失了.我安装的scala版本是2.11.显然,从maven获得的是2.10.4.

任何时候你看到"NoSuchMethodError"它总是意味着存在版本冲突; 这是一个为什么的问题.