복붙노트

[SCALA] java.lang.NoSuchMethodError : scala.Predef $ .refArrayOps

SCALA

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

나는 다음과 같은 클래스가 :

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)
  }

}

어느 다음 단위 테스트가 있습니다 :

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")
  }

}

내가 SBT 테스트를 실행할 때 나는 다음과 같은 오류가 발생합니다 :

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;

빌드 정의 :

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"

나는이의 원인을 알아낼 수 없습니다. 내 클래스와 단위 테스트는 간단한 충분히 보인다. 어떤 아이디어?

해결법

  1. ==============================

    1.scalatest_2.11는 스칼라 2.11.x.와 ScalaTest 호환 버전입니다 scalatest_2.12이 해제 될 때까지 쓰기 libraryDependencies + = "org.scalatest"%% "scalatest"% "3.0.0"% "시험"(주 %%) 대신 (스칼라 2.11.8에 대한 올바른 자동으로 버전 및 스위치를 선택합니다 그것은) 곧해야합니다. 이상 http://www.scala-sbt.org/0.13/docs/Cross-Build.html를 참조하십시오.

    scalatest_2.11는 스칼라 2.11.x.와 ScalaTest 호환 버전입니다 scalatest_2.12이 해제 될 때까지 쓰기 libraryDependencies + = "org.scalatest"%% "scalatest"% "3.0.0"% "시험"(주 %%) 대신 (스칼라 2.11.8에 대한 올바른 자동으로 버전 및 스위치를 선택합니다 그것은) 곧해야합니다. 이상 http://www.scala-sbt.org/0.13/docs/Cross-Build.html를 참조하십시오.

  2. ==============================

    2.나는 스칼라의 다른 버전 (인 IntelliJ의 IDEA)와 함께 글로벌 라이브러리 SDK했다. 파일 -> 프로젝트 구조 -> 글로벌 라이브러리 -> SDK를 제거 -> 다시. 그것은 나를 위해 예외를 해결했습니다.

    나는 스칼라의 다른 버전 (인 IntelliJ의 IDEA)와 함께 글로벌 라이브러리 SDK했다. 파일 -> 프로젝트 구조 -> 글로벌 라이브러리 -> SDK를 제거 -> 다시. 그것은 나를 위해 예외를 해결했습니다.

  3. ==============================

    3.내가 IntelliJ를 사용하고, 단지 프로젝트를 다시 가져옵니다. 나는 메이븐 또는 SBT로 오픈 프로젝트 가져 오기를 닫은 의미한다. 참고 : 나는 (자동 가져 오기 메이븐 프로젝트)를 MVN을 선택 그것은 사라졌다.

    내가 IntelliJ를 사용하고, 단지 프로젝트를 다시 가져옵니다. 나는 메이븐 또는 SBT로 오픈 프로젝트 가져 오기를 닫은 의미한다. 참고 : 나는 (자동 가져 오기 메이븐 프로젝트)를 MVN을 선택 그것은 사라졌다.

  4. ==============================

    4.당신은 여전히 ​​build.sbt에 일치하는 scalatest 버전과 스칼라 버전 이후에 오류가 발생할 경우 내 경험에 의하면, 당신은 당신의 컴퓨터에서 실행되는 실제 스칼라 버전에 대해 생각해야합니다. 당신은보고, $ 스칼라하여 확인하실 수 있습니다

    당신은 여전히 ​​build.sbt에 일치하는 scalatest 버전과 스칼라 버전 이후에 오류가 발생할 경우 내 경험에 의하면, 당신은 당신의 컴퓨터에서 실행되는 실제 스칼라 버전에 대해 생각해야합니다. 당신은보고, $ 스칼라하여 확인하실 수 있습니다

    스칼라 2.12.1 (자바 핫스팟 (TM) 64 비트 서버 VM, 자바 1.8.0_121)에 오신 것을 환영합니다. 평가 식에 입력합니다. 또는 시도 : 도움을. 메시지의 유형입니다. 이 스칼라 버전 (여기 예. 2.12.1)와 build.sbt의 하나와 일치해야합니다.

  5. ==============================

    5.당신이 불꽃을 사용하는 경우, 하둡, 스칼라, 그리고 자바, 일부 호환성 문제가 발생합니다. 당신은 다른 사람과 호환되는 각각의 버전을 사용할 수 있습니다. 내가 사용하는 스파크 버전 : 2.4.1, 하둡 : 2.7, 자바 : 9.0.1 및 스칼라 : 2.11.12 그들은 서로 호환됩니다.

    당신이 불꽃을 사용하는 경우, 하둡, 스칼라, 그리고 자바, 일부 호환성 문제가 발생합니다. 당신은 다른 사람과 호환되는 각각의 버전을 사용할 수 있습니다. 내가 사용하는 스파크 버전 : 2.4.1, 하둡 : 2.7, 자바 : 9.0.1 및 스칼라 : 2.11.12 그들은 서로 호환됩니다.

  6. ==============================

    6.내 경우, 스파크 버전을 호환합니다. 변화는 나를 위해 2.4.0 작품 스파크합니다.

    내 경우, 스파크 버전을 호환합니다. 변화는 나를 위해 2.4.0 작품 스파크합니다.

  7. ==============================

    7.이클립스에서 프로젝트 스칼라 설치 '최근 2.12 번들 (동적)'구성으로 사전 선택되는 경향이있다. 당신이 실제로 스칼라 프로젝트에 2.12를 사용하지 않으며 당신이 IDE를 통해 프로젝트를 실행하려고하면,이 문제가 표출됩니다.

    이클립스에서 프로젝트 스칼라 설치 '최근 2.12 번들 (동적)'구성으로 사전 선택되는 경향이있다. 당신이 실제로 스칼라 프로젝트에 2.12를 사용하지 않으며 당신이 IDE를 통해 프로젝트를 실행하려고하면,이 문제가 표출됩니다.

    나는 또한 내가 SBT 명령을 내 이클립스 프로젝트를 다시 빌드하면 나타났습니다 : "일식과 소스"이 2.12 설정으로 이클립스 프로젝트 스칼라 설치 다시 재설정의 부작용을 가지고 (내 build.sbt 파일이 구성된 경우에도 스칼라의 2.11 버전). 그래서 그 시나리오 모두에 대한 경계합니다.

  8. ==============================

    8.당신의 build.sbt에 다음 줄을 추가하십시오

    당신의 build.sbt에 다음 줄을 추가하십시오

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

    당신의 build.sbt은 다음과 같이해야합니다 :

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

    이와 함께, 나를 위해 오류가 해결된다.

  9. from https://stackoverflow.com/questions/40328948/java-lang-nosuchmethoderror-scala-predef-refarrayops by cc-by-sa and MIT license