导入scala.reflect.runtime

时间:2018-06-29 16:02:46

标签: scala

为什么下面的代码默认情况下可以在解释器中工作,但是在sbt项目的情况下需要显式导入依赖项?

Welcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.

scala> import scala.reflect.runtime._
import scala.reflect.runtime._

vs

sbt run抛出

object runtime is not a member of package reflect

libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.12.3"

在build.sbt

2 个答案:

答案 0 :(得分:2)

因为REPL依赖于scala-compiler,而依赖于scala-reflect,所以不将它们放入代码的类路径中将不会节省任何内容。

答案 1 :(得分:1)

例如,发生类似情况

import scala.util.parsing.combinator._

无需任何辅助操作即可将其导入REPL中,但需要在sbt项目中添加依赖项。

原因是当REPL启动时,它将lib目录中的所有jar添加到类路径(Windows中为scala.bat)

set _TOOL_CLASSPATH=
if "%_TOOL_CLASSPATH%"=="" (
  for %%f in ("!_SCALA_HOME!\lib\*.jar") do call :add_cpath "%%f"
  for /d %%f in ("!_SCALA_HOME!\lib\*") do call :add_cpath "%%f"
)

!_ SCALA_HOME!\ lib \

中包含以下罐子
..
jline-2.14.4.jar
scala-compiler.jar
scala-library.jar
scala-parser-combinators_2.12-1.0.6.jar
scala-reflect.jar
scala-swing_2.12-2.0.0.jar
scala-xml_2.12-1.0.6.jar
scalap-2.12.3.jar