编译器镜像中没有找到对象scala – 以编程方式运行Scala编译器

运行w /一个简单的SBT项目w / Java 7(下面的详细信息)和调用sbt在命令行运行(没有IntelliJ或任何东西)

资源

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)
}

错误

error: error while loading Object,Missing dependency 'object scala in compiler mirror',required by /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class)
[error] (run-main-0) scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found.
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:1388)
    at scala.tools.nsc.Global$Run.<init>(Global.scala:1053)
    <etc...>

build.sbt

scalaVersion := "2.11.4"

val scalaV = "2.11.4"

libraryDependencies ++= Seq(
  "org.scala-lang"    %   "scala-compiler"      % scalaV,"org.scala-lang"    %   "scala-library"       % scalaV,"org.scala-lang"    %   "scala-reflect"       % scalaV
)

java的

$java -version
java version "1.7.0_60-ea"
Java(TM) SE Runtime Environment (build 1.7.0_60-ea-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09,mixed mode)

解决方法

这是你必须说的:

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)
}

这花了我几分钟的时间.该方法名称“embeddedDefaults”与sbt中的任何一个都是隐藏的.

对MutableSettings的评论(这表明副作用):

/** Initializes these settings for embedded use by type `T`.
  * The class loader defining `T` should provide resources `app.class.path`
  * and `boot.class.path`.  These resources should contain the application
  * and boot classpaths in the same form as would be passed on the command line.*/

缩进与源代码一样.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...