Reflect Toolbox 在 Scala 2.11 中工作,在 Scala 2.12 中不工作
Reflect Toolbox worked in Scala 2.11 not working in Scala 2.12
这段在 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 中发生了什么变化?
Exception in thread "main" java.lang.AbstractMethodError:
scala.reflect.internal.SymbolPairs$Cursor.matches(Lscala/reflect/internal/Symbols$Symbol;)Z
注意:我必须添加到类路径 scala-compiler-2.12.2.jar
是否有可能,您将项目更新为 Scala 2.12,但在类路径中留下了对 scala-compiler
2.11 的依赖?
关于您的代码,2.12 中没有任何变化。为了让您的代码正常工作,您必须依赖于 scala-compiler.
这是一个使用 Scala 2.11 的 SBT 项目,没有 scala-compiler
依赖:
name := "q53391593"
organization := "sk.ygor.Whosebug"
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.Whosebug"
version := "1.0-SNAPSHOT"
scalaVersion := "2.12.6"
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
这会将两个额外的 jar 放在您的 classpat 上:scala-compiler:2.12.6:jar
和 scala-reflect:2.12.6:jar
。如果您不使用 SBT,请确保您自己包含它们。
此外,请注意 scalaVersion.value
的用法以指定库的版本。这可以防止将不兼容版本的 Scala 库混合在一起。
这段在 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 中发生了什么变化?
Exception in thread "main" java.lang.AbstractMethodError: scala.reflect.internal.SymbolPairs$Cursor.matches(Lscala/reflect/internal/Symbols$Symbol;)Z
注意:我必须添加到类路径 scala-compiler-2.12.2.jar
是否有可能,您将项目更新为 Scala 2.12,但在类路径中留下了对 scala-compiler
2.11 的依赖?
关于您的代码,2.12 中没有任何变化。为了让您的代码正常工作,您必须依赖于 scala-compiler.
这是一个使用 Scala 2.11 的 SBT 项目,没有 scala-compiler
依赖:
name := "q53391593"
organization := "sk.ygor.Whosebug"
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.Whosebug"
version := "1.0-SNAPSHOT"
scalaVersion := "2.12.6"
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
这会将两个额外的 jar 放在您的 classpat 上:scala-compiler:2.12.6:jar
和 scala-reflect:2.12.6:jar
。如果您不使用 SBT,请确保您自己包含它们。
此外,请注意 scalaVersion.value
的用法以指定库的版本。这可以防止将不兼容版本的 Scala 库混合在一起。