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

时间:2014-10-15 19:09:27

标签: 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)
}

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

  

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

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

case x :: xs => 1 :: removeLast(xs)}

然后它有效。

问题可能是什么?

11 个答案:

答案 0 :(得分:27)

我有这个问题。同意Andrzej,idea使用自己的编译器,所以你必须以某种方式禁用它。 转到设置 - > Scala->工作表,然后取消选中“在编译器流程中运行工作表”

答案 1 :(得分:5)

在我的案例中,任何答案都没有用。我仍然找到了一个适合我的解决方案.. 这是scalatest版本的问题。在pom.xml中升级到

  <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_2.11</artifactId>
         <version>2.2.4</version>
         <scope>test</scope>
  </dependency>

帮助

答案 2 :(得分:5)

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

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

我用过

  

-verbose:类

在JVM开关中

让它显示它在哪里;我立即抓住它,因为它试图从Scala SDK加载类(它会期望它从Maven中提取库)。

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

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

答案 3 :(得分:2)

就像其他人在这里说的那样,我遇到了同样的问题,因为我有一些使用2.10的库,尽管2.11时有scalatest。

<!-- http://www.scalactic.org/ -->
<dependency>
    <groupId>org.scalactic</groupId>
    <artifactId>scalactic_2.11</artifactId>
    <version>${scalactic.version}</version>
    <scope>test</scope>
</dependency>

<!-- http://www.scalatest.org/ -->
<dependency>
    <groupId>org.scalatest</groupId>
    <artifactId>scalatest_2.11</artifactId>
    <version>${scalactic.version}</version>
    <scope>test</scope>
</dependency>

Chech您正在使用的所有库都在相同的Scala版本

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>${spark.version}</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>${spark.version}</version>
    <scope>provided</scope>
</dependency>

具有属性

<properties>
    <scala.tools.version>2.11.8</scala.tools.version>
    <scala.version>2.11.8</scala.version>
    <scalactic.version>3.0.0</scalactic.version>

    <!-- Library Versions -->
    <spark.version>2.0.0</spark.version>
    ....
</properties>

答案 4 :(得分:1)

我刚遇到同样的问题。原来我已经下载了包含scala-library-2.10.x的错误版本的Akka,而我的项目使用了2.11.6。抓住最新版本的Akka,包括2.11.5,解决了这个问题。

所以,这似乎是一个兼容性问题,所以我将来会检查依赖项。

答案 5 :(得分:1)

错误 java.lang.NoSuchMethodError:scala.collection.immutable。$ colon $ colon.hd $ 1()Ljava / lang / Object

原因 此错误专门是由于spark和scala之间的版本不匹配所致。我在使用spark 2.2.0和scala 2.10.6时遇到错误。然后我换成了不同的Scala版本,但没有成功。

解决方案 仅当我将scala版本更改为2.11.6时,此错误才会得到解决。这个版本非常适合spark 2.2.0。也许您可以为同一问题尝试使用更高版本的scala,但我尝试使用2.12.x但没有用。

建议 要求您在进行任何编码之前设置以下版本: 火花-2.2.0 斯卡拉-2.11.6

我还使用了以下pom:

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>
</dependencies>

答案 6 :(得分:0)

我有同样的问题。当您将其更改为使用地图功能时,它可以工作!我不知道为什么,但那就是如何解决它。

答案 7 :(得分:0)

我发现这可能是因为有不同版本的scalatest和scalamock。以下Maven

realloc

答案 8 :(得分:0)

添加json4时,我有同样的想法。我通过将artifactId从json4s-native_2.12更改为-json4s-native_2.11来解决了这个问题。 我想这与您使用的Scala版本是2.11而不是2.12有关(您可以在properties文件的pom.xml xml节点中看到您的Scala版本,我的名称是:<scala.version>2.11</scala.version>。 )

答案 9 :(得分:0)

我通过将我的项目中的scala sdk版本从2.12设置为2.11解决了这个问题。

答案 10 :(得分:0)

这是版本问题,只需使用scala sdk版本到2.11。