2012-02-17 28 views
6

tengo un problema con scala.tools.sbtScala SBT: scala.tools.nsc no se está ejecutando

archivo Scala

Aquí he utilizado funcionalidad analizador para hacer el árbol de sintaxis abstracta código 2 + 3 configuración

import scala.tools.nsc._ 
object Main extends App { 
    var i = new Interpreter 
    println(i.parse("2 + 3")) 
} 

SBT

name := "scalaSample" 

version := "1.0-SNAPSHOT" 

scalaVersion := "2.9.1" 

libraryDependencies += "org.scalatest" %% "scalatest" % "1.7.1" % "test" 

libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.9.1" 

error

Error al inicializar compilador: Scala objeto no encontrado. ** Tenga en cuenta que a partir de 2.8 scala no asume el uso de la ruta de clase java. ** Para el comportamiento anterior, pase -usejavacp a scala, o si usa un objeto Settings ** programáticamente, settings.usejavacp.value = true.

[error] (gestión principal) java.lang.NullPointerException java.lang.NullPointerException en scala.tools.nsc.CompilationUnits $ CompilationUnit. (CompilationUnits.scala: 16) en scala.tools.nsc.interpreter.ExprTyper $ codeParser $ .applyRule (ExprTyper.scala: 22) en scala.tools.nsc.interpreter.ExprTyper $ codeParser $ .stmts (ExprTyper .scala: 36) en scala.tools.nsc.interpreter.ExprTyper $$ $ anonfun análisis sintáctico $ 2.Apply (ExprTyper.scala: 47) en scala.tools.nsc.interpreter.ExprTyper $$ $ anonfun análisis sintáctico $ 2 .apply (ExprTyper.scala: 46) en scala.tools.nsc.reporters.Reporter.withIncompleteHandler (Reporter.scala: 46) en scala.tools.nsc.interpreter.ExprTyper $ class.parse (ExprTyper.scala : 46) en scala.tools.nsc.interpreter.IMain $ exprTyper $ .parse (IMain.scala: 1012) en scala.tools.nsc.interpreter.IMain.parse (IMain.scala: 1013) en eu.semantiq.scalaToJS.Main $ retractadoInit $ body.apply (Principal. scala: 7) at scala.Function0 $ class.apply $ mcV $ sp (Function0.scala: 34) at scala.runtime.AbstractFunction0.apply $ mcV $ sp (AbstractFunction0.scala: 12) at scala.App $ $ anonfun $ main $ 1.aplicación (App.scala: 60) en scala.App $$ anonfun $ main $ 1.aplicación (App.scala: 60) en scala.collection.LinearSeqOptimized $ class.foreach (LinearSeqOptimized.scala: 59) en scala.collection.immutable.List.foreach (List.scala: 45) en scala.collection.generic.TraventableForwarder $ class.foreach (TraversableForwarder.scala: 30) en scala.App $ class.main (App.scala: 60) en eu.semantiq.scalaToJS.Main $ .main (Main.scala: 5) en eu.semantiq.scalaToJS.Main.main (Main.scala) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Método Nativo) en sol .reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) en java.lang.reflect.Method.invoke (Method.java:616) java .lang.RuntimeException: código de salida distinto de cero: 1 en scala.sys.package $ .error (paquete.Scala: 27)

en Scala REPL todo funciona

Bienvenido a Scala versión 2.9.0.1 (OpenJDK 64 bits del servidor VM, Java 1.6.0_23 ). Escriba expresiones para que sean evaluadas. Escriba: ayuda para obtener más información.

Scala>importación scala.tools.nsc._

scala.tools.nsc._ importación

Scala>var i = nuevo Intérprete

advertencia: había 4 depreciación advertencias; volver a ejecutar con -deprecation for details warning: hubo 1 advertencias de desactivación; re-ejecutar con -deprecation para los detalles

i: scala.tools.nsc.Interpreter = [email protected]

Scala>println (i.parse ("2 + 3"))

Algunos (Lista (2 $ más (3)))

me siento muy mal por mi mala Inglés

Respuesta

4

acuerdo a FAQ de xsbt:

SBT realiza pruebas en la misma JVM que SBT sí mismo y clases Scala no son en el mismo cargador de clases como las clases de la aplicación.

Y hay más:

La clave es inicializar los ajustes para el intérprete usando embeddedDefaults.

El ejemplo que se da allí utiliza algún tipo arbitrario MyType. De hecho, puede usar cualquiera de sus tipos para ayudar a sbt a encontrar el cargador de clases apropiado (consulte this answer).

Por lo tanto, su código debería tener este aspecto:

import scala.tools.nsc._ 

trait Foo // Arbitrary type added to get stuff working 

object Main extends App { 
    val settings = new Settings 
    settings.embeddedDefaults[Foo] 
    val interpreter = new Interpreter(settings) 
    println(interpreter.parse("2 + 3")) 
} 
Cuestiones relacionadas