Объект scala в зеркале компилятора не найден - программный запуск компилятора Scala [без sbt - без IDE]
[РЕДАКТИРОВАТЬ: добавить точность просят в комментариях]
Я пытаюсь запустить компилятор программно и получаю ошибку "Отсутствует зависимость объекта" в зеркале компилятора ". Я обнаружил, что этот пост- объект scala в зеркале компилятора не найден - программный запуск компилятора Scala (но он объясняет, как решить проблему, только если мы запустим программу из sbt, а не извне).
Поэтому я копирую / вставляю вот пример:
import scala.tools.nsc.{ Global, Settings }
object Playground extends App {
val compiler = new Global(new Settings())
val testFiles = List("Test.scala")
val runner = new compiler.Run()
val result = runner.compile(testFiles)
println(result)
}
и решение, которое заставляет его работать при запуске из SBT:
trait Probe
object Playground extends App {
//val compiler = new Global(new Settings())
val s = new Settings()
s.embeddedDefaults[Probe]
val compiler = new Global(s)
val testFiles = List("Test.scala")
val runner = new compiler.Run()
val result = runner.compile(testFiles)
println(result)
}
Я пытаюсь запустить обе версии непосредственно из терминала, передавая в качестве classpath значение fullClassPath из sbt:
java -cp /home/lorilan/path-to-my-project/target/scala-2.11/classes:/home/lorilan/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.6.jar:/home/lorilan/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.6.jar:/home/lorilan/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.6.jar p.Playground
где Java -версия дает
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (Arch Linux build 7.u79_2.5.5-1-x86_64)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
Каждый раз я получаю следующую ошибку:
error: error while loading Object, Missing dependency 'object scala in compiler mirror', required by /usr/lib/jvm/java-7-openjdk/jre/lib/rt.jar(java/lang/Object.class)
Exception in thread "main" scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found.
at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)
at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:53)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:173)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage$lzycompute(Definitions.scala:161)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage(Definitions.scala:161)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass$lzycompute(Definitions.scala:162)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass(Definitions.scala:162)
at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1392)
at scala.tools.nsc.Global$Run.<init>(Global.scala:1216)
at puck.Playground$.main(Playground.scala:15)
at puck.Playground.main(Playground.scala)
Итак, мой вопрос состоит из двух частей:
Может ли кто-нибудь объяснить мне, как работает "магический трюк", показанный в вышеупомянутом посте? (Я не получаю комментарий метода embeddedDefaults)
может кто-нибудь дать такой же волшебный трюк для запуска игровой площадки из терминала?