Reflect Toolbox работает в Scala 2.11, не работает в Scala 2.12 - PullRequest
0 голосов
/ 20 ноября 2018

Этот код, который работает в Scala 2.11, не работает в 2.12:

import scala.reflect.runtime.universe
import scala.tools.reflect.ToolBox
val tb = universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
tb.eval(tb.parse("""println("hello!")"""))

Я получаю ошибку ниже, что изменилось в 2.12?

Исключение в потоке "main "java.lang.AbstractMethodError: scala.reflect.internal.SymbolPairs $ Cursor.matches (Lscala / отражение / internal / Symbols $ Symbol;) Z

Примечание: мне пришлось добавить в путь к классамscala-compiler-2.12.2.jar

1 Ответ

0 голосов
/ 20 ноября 2018

Возможно ли, что вы обновили свой проект до Scala 2.12, но оставили зависимость от scala-compiler 2.11 на вашем пути к классам?

Ничего не изменилось в 2.12 по отношению к вашему коду.Чтобы ваш код работал, у вас должна быть зависимость от scala-compiler .

Вот проект SBT с Scala 2.11, без зависимости scala-compiler:

name := "q53391593"
organization := "sk.ygor.stackoverflow"
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.12" 

Ваш код не компилируется: object runtime is not a member of package reflect, object tools is not a member of package scala, not found: value universe

Вам необходимо добавить зависимость на scala-compiler:

name := "q53391593"
organization := "sk.ygor.stackoverflow"
version := "1.0-SNAPSHOT"
scalaVersion := "2.12.6" 
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value

Это приведет кдве дополнительные фляги на вашем classpat: scala-compiler:2.12.6:jar и scala-reflect:2.12.6:jar.Если вы не используете SBT, убедитесь, что вы включили их самостоятельно.

Также обратите внимание на использование scalaVersion.value для указания версии библиотеки.Это предотвращает смешивание несовместимых версий библиотек Scala.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...