webentwicklung-frage-antwort-db.com.de

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

Ich habe folgende Funktion:

def removeLast(list: List[Int]): List[Int] = list match {
  case List() => List()
  case List(x) => List()
  case x :: xs => x :: removeLast(xs)
}

Wenn ich es definiere und von der sbt-Konsole aus benutze, funktioniert alles einwandfrei. Wenn ich jedoch ein Arbeitsblatt in Intellij IDEA erstelle und versuche, es auszuführen, erscheint die folgende Ausnahme:

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

Wenn ich die letzte Zeile ändere,

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

dann klappt es.

Was könnte das Problem sein?

16
Dawid Mazuruk

Ich hatte dieses Problem. Stimmen Sie mit Andrzej überein, da idea einen eigenen Compiler verwendet, so müssen Sie ihn irgendwie deaktivieren. Gehen Sie zu Einstellungen-> Scala-> Arbeitsblatt und deaktivieren Sie "Führen Sie das Arbeitsblatt im Compiler-Prozess aus ".

27
Tomek Kozlowski

Jede Antwort war in meinem Fall nicht nützlich. Trotzdem habe ich eine Lösung gefunden, die für mich funktioniert hat. Es war ein Problem mit der skalierbaren Version. In pom.xml zu 

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

hat geholfen

5
viniolli

Obwohl das Obige mein Problem nicht gelöst hat, hängt es mit Intellij zusammen. 

Grundsätzlich zog es das Scala SDK vor, die Class :: -Methode aufzulösen, anstatt aus den Abhängigkeiten zu laden. 

Ich benutzte 

-verbose: Klasse

in der JVM wechseln, damit es mir zeigt, wo es hingesehen hat; Ich habe mich sofort damit beschäftigt, weil es versucht, die Klasse aus dem Scala SDK zu laden (es würde erwarten, dass sie Libs von Maven abruft). 

Ich habe buchstäblich nur das Scala SDK aus meinen Projekteinstellungen gelöscht, und das Problem wurde behoben. Meine Erfahrungen mit Scala (und definitiv in einer gemischten Java-Umgebung) lassen mich glauben, dass es Wege gibt, um zu reifen. Dies ist eine grundlegende Klasse/Methode, die ich nicht glauben kann, dass sie zwischen den Versionen verschwunden ist. Die Scala-Version, die ich installiert hatte, war 2.11. Anscheinend wird 2.10.4 von maven eingezogen. 

Immer wenn Sie "NoSuchMethodError" sehen, bedeutet immer, dass ein Versionskonflikt vorliegt. Es ist eine Frage des Warum.

5

Wie andere hier sagten, hatte ich das gleiche Problem, da ich einige Bibliotheken mit 2.10 hatte, obwohl ich bei 2.11 skaliert war.

<!-- 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>

Vergewissern Sie sich, dass alle von Ihnen verwendeten Bibliotheken in derselben Scala-Version sind

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

Zu

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

Als Eigenschaften haben

<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>
2
Franzi

Ich bin gerade auf das gleiche Problem gestoßen. Es stellte sich heraus, dass ich die falsche Version von Akka heruntergeladen hatte, die scala-library-2.10.x enthielt, während mein Projekt 2.11.6 verwendete. Mit der neuesten Version von Akka (einschließlich 2.11.5) wurde das Problem gelöst.

Es scheint also, dass dies ein Kompatibilitätsproblem ist, also würde ich in Zukunft Abhängigkeiten prüfen.

1
Roberto

Fehler Java.lang.NoSuchMethodError: scala.collection.immutable. $ Colon $ colon.hd $ 1 () Ljava/lang/Object

Grund Dieser Fehler ist insbesondere auf Versionsunterschiede zwischen Funken und Scala zurückzuführen. Ich bin auf den Fehler gestoßen, als ich Spark 2.2.0 und Scala 2.10.6 verwendete. Dann habe ich zu verschiedenen Scala-Versionen gewechselt, aber ich hatte keinen Erfolg.

Auflösung Dieser Fehler wird nur behoben, wenn ich die Scala-Version in 2.11.6 geändert habe. Diese Version passte perfekt zu spark 2.2.0. Möglicherweise können Sie höhere Versionen von Scala für dasselbe Problem ausprobieren, aber ich habe es für 2.12.x versucht, aber es hat nicht funktioniert.

Vorschlag Fordern Sie vor der Kodierung die folgenden Versionen an: Spark - 2.2.0 Scala - 2.11.6

Auch ich habe den untenstehenden Pom benutzt:

<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>
1
Aakash Agrawal

Ich habe das gleiche Problem. Wenn Sie die Kartenfunktion verwenden, funktioniert sie! Ich weiß nicht warum, aber das ist, wie man es reparieren kann.

0
M.Rez

Ich habe herausgefunden, dass dies durch unterschiedliche Versionen von scalatest und scalamock verursacht werden kann. Der folgende 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>
0
Andrew Long

Beim Hinzufügen von json4 hatte ich dasselbe. Ich löste es, indem ich die ArtifactId von json4s-native_2.12 in - json4s-native_2.11. änderte. Ich denke, das hängt mit der Scala-Version zusammen, die Sie verwenden. Meine Version war 2.11 und nicht 2.12 (Sie können Ihre im properties xml-Knoten in der pom.xml-Datei sehen , mein ist: <scala.version>2.11</scala.version>.)

0
Ohad Bitton