你用的是什么版本?这是 sbt .13。
> console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.11.0 (OpenJDK 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import javax.script._
import javax.script._
scala> new ScriptEngineManager().getEngineByName("scala")
res0: javax.script.ScriptEngine = scala.tools.nsc.interpreter.IMain@7078c799
scala> new ScriptEngineManager().getEngineByName("rhino")
res1: javax.script.ScriptEngine = com.sun.script.javascript.RhinoScriptEngine@5c854934
scala> new ScriptEngineManager().getEngineFactories
res2: java.util.List[javax.script.ScriptEngineFactory] = [com.sun.script.javascript.RhinoScriptEngineFactory@454ee4c0, scala.tools.nsc.interpreter.IMain$Factory@354e3bce]
等等,你问的是测试上下文——
好吧,在我对解码更多 sbt 失去兴趣之前,添加到 libraryDependencies:
"org.scala-lang" % "scala-compiler" % scalaVersion.value % "test",
启用定位 Scala 脚本引擎:
@Test def engines: Unit = {
import javax.script._
val all = new ScriptEngineManager().getEngineFactories
Console println s"Found ${all.size}: $all"
assert(all.size > 0)
}
毫无疑问,有一种简单的方法可以直接将 runtime:full-classpath 添加到 test:full-classpath。因为它是简单的构建工具,对吧?
对于 Java 8 上的 Nashorn,请注意位置:
> set fullClasspath in Test += Attributed.blank(file(s"${util.Properties.javaHome}/lib/ext/nashorn.jar"))
[info] Defining test:fullClasspath
[info] The new value will be used by test:console, test:executeTests and 5 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to goofy (in build file:/home/apm/goofy/)
> test
Found 1: [jdk.nashorn.api.scripting.NashornScriptEngineFactory@7fa2239d]
[info] Passed: Total 10, Failed 0, Errors 0, Passed 10
更新: https ://github.com/sbt/sbt/issues/1214
另外我猜它仍然被认为是黑色艺术:
// Somehow required to get a js engine in tests (https://github.com/sbt/sbt/issues/1214)
fork in Test := true