繁体   English   中英

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

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

我有以下功能:

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; 在 week5.A$A26$A$A26.removeLast(lists.sc8362409100671270508.tmp:30) 在 #worksheet#.#worksheet#(lists.sc8362409100671270508.tmp:33)

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

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

那么它的工作原理。

可能是什么问题?

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

在我的情况下,任何答案都没有用。 我仍然找到了一个对我有用的解决方案。这是 Scalatest 版本的问题。 在 pom.xml 升级到

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

有帮助

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

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

我用了

-详细:类

在 JVM 开关中让它向我显示它在寻找的位置; 立即让我知道它是因为它试图从 Scala SDK 加载类(它希望它从 Maven 中获取库)。

我真的只是从我的项目设置中删除了 Scala SDK,问题就消失了。 到目前为止,我使用 Scala 的经验(当然是在混合 Java 环境中)让我相信它有办法走向成熟。 这是一个如此基本的类/方法,我不敢相信它在版本之间消失了。 我安装的 Scala 版本是 2.11。 显然,从 maven 中获取的是 2.10.4。

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

就像这里的其他人所说的那样,我遇到了同样的问题,因为我有一些库使用 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>

检查您使用的所有库都在同一个 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>

我刚刚遇到了同样的问题。 结果是我下载了错误版本的 Akka,其中包括 scala-library-2.10.x,而我的项目使用的是 2.11.6。 抓取最新版本的 Akka,包括 2.11.5,解决了这个问题。

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

错误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 但没有奏效。

建议要求您在进行任何编码之前设置以下版本:spark - 2.2.0 scala - 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>

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

我也有同样的问题。 当您将其更改为使用地图功能时,它会起作用! 我不知道为什么,但这就是解决它的方法。

我发现这可能是由不同版本的 scalatest 和 scalamock 引起的。 下面的Maven

<dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_2.11</artifactId><!-- this was previously 2.10 -->
        <version>2.2.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.scalamock</groupId>
        <artifactId>scalamock-scalatest-support_2.11</artifactId>
        <version>3.2</version>
        <scope>test</scope>
    </dependency>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM