在Scala 2.11中工作的Reflect Toolbox在Scala 2.12中工作

时间:2018-11-20 11:03:36

标签: scala scala-2.12

在Scala 2.11中可用的此代码在2.12中不起作用:

rval = sp.SendCommand("AT+CSMP=17,167,0,144");

我收到以下错误,在2.12版中发生了什么变化?

  

线程“ main”中的异常java.lang.AbstractMethodError:   scala.reflect.internal.SymbolPairs $ Cursor.matches(Lscala / reflect / internal / Symbols $ Symbol;)Z

注意:我必须添加到类路径import scala.reflect.runtime.universe import scala.tools.reflect.ToolBox val tb = universe.runtimeMirror(getClass.getClassLoader).mkToolBox() tb.eval(tb.parse("""println("hello!")"""))

1 个答案:

答案 0 :(得分:1)

是否可以将项目更新为Scala 2.12,但在类路径上保留对scala-compiler 2.11的依赖?

在2.12中,与您的代码无关。为了使代码正常工作,您必须对scala-compiler有依赖性。

这是一个具有Scala 2.11的SBT项目,没有scala-compiler依赖项:

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

您的代码无法编译:{{1​​}},object runtime is not a member of package reflectobject tools is not a member of package scala

您需要添加对not found: value universe的依赖关系:

scala-compiler

这将在您的classpat上放置两个额外的jar:name := "q53391593" organization := "sk.ygor.stackoverflow" version := "1.0-SNAPSHOT" scalaVersion := "2.12.6" libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value scala-compiler:2.12.6:jar。如果您不使用SBT,请确保自己包括它们。

此外,请注意使用scala-reflect:2.12.6:jar来指定库的版本。这样可以避免将不兼容的Scala库版本混合在一起。