Я пытаюсь написать базовый Scala REPL, используя некоторую информацию, которую я нашел на разных сайтах. Моя самая простая реализация REPL выглядит так:
import scala.tools.nsc.Settings
import scala.tools.nsc.interpreter._
object BillyREPL extends App {
val settings = new Settings
settings.usejavacp.value = true
settings.deprecation.value = true
new ILoop().process(settings)
}
При следующих настройках сборки
import sbt._
import sbt.Keys._
object BillyREPLBuild extends Build {
lazy val billyrepl = Project(
id = "billyrepl",
base = file("."),
settings = Project.defaultSettings ++ Seq(
name := "BillyREPL",
organization := "tv.yobriefcasts",
version := "0.1-SNAPSHOT",
scalaVersion := "2.10.1",
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-compiler" % "2.10.1",
"org.scala-lang" % "scala-library" % "2.10.1"
)
)
)
}
Однако попытка запустить это приводит к некоторым предупреждениям и возможной ошибке (которая, как я полагаю, вызвана первоначальным предупреждением),
Welcome to Scala version 2.10.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_12-ea).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
Failed to initialize compiler: object scala.annotation.Annotation in compiler mirror not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
И ошибка при попытке прочитать/оценить ЧТО-НИБУДЬ ниже. Я не уверен, что это связано с какой-то дополнительной отсутствующей зависимостью, и я понимаю, что сообщение об ошибке говорит о том, что это не распространено, но я задавался вопросом, прежде чем открывать проблему, имел ли кто-нибудь дело с этим раньше?
2
Failed to initialize the REPL due to an unexpected error.
This is a bug, please, report it along with the error diagnostics printed below.
java.lang.NullPointerException
at scala.tools.nsc.interpreter.ExprTyper$codeParser$.applyRule(ExprTyper.scala:24)
at scala.tools.nsc.interpreter.ExprTyper$codeParser$.stmts(ExprTyper.scala:35)
at scala.tools.nsc.interpreter.ExprTyper$$anonfun$parse$2.apply(ExprTyper.scala:43)
at scala.tools.nsc.interpreter.ExprTyper$$anonfun$parse$2.apply(ExprTyper.scala:42)
at scala.tools.nsc.reporters.Reporter.withIncompleteHandler(Reporter.scala:51)
at scala.tools.nsc.interpreter.ExprTyper$class.parse(ExprTyper.scala:42)
at scala.tools.nsc.interpreter.IMain$exprTyper$.parse(IMain.scala:1074)
at scala.tools.nsc.interpreter.IMain.parse(IMain.scala:1078)
at scala.tools.nsc.interpreter.IMain$$anonfun$showCodeIfDebugging$1.apply(IMain.scala:1168)
at scala.tools.nsc.interpreter.IMain$$anonfun$showCodeIfDebugging$1.apply(IMain.scala:1168)
at scala.tools.nsc.interpreter.IMain.beSilentDuring(IMain.scala:238)
at scala.tools.nsc.interpreter.IMain.showCodeIfDebugging(IMain.scala:1168)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.scala:800)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:761)
at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:618)
at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:661)
at scala.tools.nsc.interpreter.IMain$$anonfun$quietBind$1.apply(IMain.scala:660)
at scala.tools.nsc.interpreter.IMain$$anonfun$quietBind$1.apply(IMain.scala:660)
at scala.tools.nsc.interpreter.IMain.beQuietDuring(IMain.scala:232)
at scala.tools.nsc.interpreter.IMain.quietBind(IMain.scala:660)
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1$$anonfun$apply$mcZ$sp$2.apply$mcV$sp(ILoop.scala:838)
at scala.tools.nsc.interpreter.ILoopInit$class.runThunks(ILoopInit.scala:122)
at scala.tools.nsc.interpreter.ILoop.runThunks(ILoop.scala:42)
at scala.tools.nsc.interpreter.ILoopInit$class.postInitialization(ILoopInit.scala:95)
at scala.tools.nsc.interpreter.ILoop.postInitialization(ILoop.scala:42)
at scala.tools.nsc.interpreter.ILoopInit$$anonfun$createAsyncListener$1.apply$mcV$sp(ILoopInit.scala:63)
at scala.tools.nsc.interpreter.ILoopInit$$anonfun$createAsyncListener$1.apply(ILoopInit.scala:60)
at scala.tools.nsc.interpreter.ILoopInit$$anonfun$createAsyncListener$1.apply(ILoopInit.scala:60)
at scala.tools.nsc.io.package$$anon$3.call(package.scala:40)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
.
sbt run
, потому что запуск пользовательского интерпретатора из sbt не работает, насколько я знаю. Если это так, попробуйте собрать автономную версию с помощью sbt-assembly и посмотреть, правильно ли она запустится. - person 0__   schedule 05.06.2013