webentwicklung-frage-antwort-db.com.de

java.lang.NoSuchMethodError: scala.Predef $ .refArrayOps

Ich habe folgende Klasse:

import scala.util.{Success, Failure, Try}


class MyClass {

  def openFile(fileName: String): Try[String]  = {
    Failure( new Exception("some message"))
  }

  def main(args: Array[String]): Unit = {
    openFile(args.head)
  }

}

Welches hat den folgenden Komponententest:

class MyClassTest extends org.scalatest.FunSuite {

  test("pass inexistent file name") {
    val myClass = new MyClass()
    assert(myClass.openFile("./noFile").failed.get.getMessage == "Invalid file name")
  }

}

Wenn ich sbt test starte, erhalte ich die folgende Fehlermeldung:

Java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
        at org.scalatest.tools.FriendlyParamsTranslator$.translateArguments(FriendlyParamsTranslator.scala:174)
        at org.scalatest.tools.Framework.runner(Framework.scala:918)
        at sbt.Defaults$$anonfun$createTestRunners$1.apply(Defaults.scala:533)
        at sbt.Defaults$$anonfun$createTestRunners$1.apply(Defaults.scala:527)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.immutable.Map$Map1.foreach(Map.scala:109)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
        at scala.collection.AbstractTraversable.map(Traversable.scala:105)
        at sbt.Defaults$.createTestRunners(Defaults.scala:527)
        at sbt.Defaults$.allTestGroupsTask(Defaults.scala:543)
        at sbt.Defaults$$anonfun$testTasks$4.apply(Defaults.scala:410)
        at sbt.Defaults$$anonfun$testTasks$4.apply(Defaults.scala:410)
        at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:35)
        at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:34)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
        at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
        at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
        at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
        at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
        at Java.lang.Thread.run(Thread.Java:745)
[error] (test:executeTests) Java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;

Build Definitionen:

version := "1.0"

scalaVersion := "2.12.0"

// https://mvnrepository.com/artifact/org.scalatest/scalatest_2.11
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.0"

Ich kann nicht herausfinden, was das verursacht. Mein Klassen- und Unit-Test scheint einfach zu sein. Irgendwelche Ideen?

26
octavian

scalatest_2.11 ist die Version von ScalaTest, die nur mit Scala 2.11.x kompatibel ist. Schreiben Sie stattdessen libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test" (Hinweis %%), um die richtige Version automatisch auszuwählen, und wechseln Sie zu Scala 2.11.8, bis scalatest_2.12 freigegeben wird (dies sollte sehr bald geschehen). Siehe http://www.scala-sbt.org/0.13/docs/Cross-Build.html für mehr.

24
Alexey Romanov

Ich hatte SDK in globalen Bibliotheken mit einer anderen Version von Scala (IntelliJ IDEA).
Datei -> Projektstruktur -> Globale Bibliotheken -> SDK entfernen -> Neu erstellen. Es hat die Ausnahme für mich behoben.

23
Anton Tkachov

Ich habe IntelliJ verwendet und das Projekt einfach noch einmal importiert. Ich meine, schließe das offene Projekt und importiere es als Maven oder SBT. 

6
HHH

Wenn Sie nach dem Abgleichen der scalatest-Version und der scala-Version in build.sbt immer noch Fehler erhalten, müssen Sie meiner Erfahrung nach über Ihre aktuelle Scala-Version nachdenken, die auf Ihrem Computer ausgeführt wird .. __ Sie können sie anhand von $ scala überprüfen

Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121). Type in expressions for evaluation. Or try :help. diese Art von Meldungen . Sie müssen mit dieser Scala-Version übereinstimmen (zB 2.12.1 hier) und build.sbts.

1
MKatleast3

In meinem Fall macht die Spark Version es inkompatibel. Ändern Sie zu Spark 2.4.0 funktioniert für mich.

1
louis l

Wenn Sie Spark, Hadoop, Scala und Java verwenden, treten einige Inkompatibilitäten auf. Sie können die jeweils kompatiblen Versionen verwenden. Ich benutze Spark-Version: 2.4.1 , Hadoop: 2.7 , Java : 9.0.1 und Scala: 2.11.12 sind miteinander kompatibel.

1
Community Ans

Fügen Sie die folgende Zeile in Ihre build.sbt ein.

libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"

ihre build.sbt sollte so aussehen:

libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.1"

libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"

Damit ist der Fehler für mich behoben.

0
Yousef Irman

in Eclipse ide wird das Projekt normalerweise mit der Konfiguration 'Latest 2.12 bundle (dynamic)' der Scala-Installation vorgewählt. Wenn Sie nicht tatsächlich 2.12 für Ihr Scala-Projekt verwenden und versuchen, Ihr Projekt über die IDE auszuführen, tritt dieses Problem auf.

Ich habe auch bemerkt, wenn ich mein Eclipse-Projekt mit dem Befehl sbt: "Eclipse with-source" neu aufbaue, dass dies die Nebenwirkung des Zurücksetzens der Eclipse-Projektskala-Installation auf die Einstellung 2.12 hat (obwohl meine build.sbt-Datei konfiguriert ist) für eine 2.11-Version von Scala). Achten Sie also auf beide Szenarien.

0
Andrew Norman