我对scala.tools.sbt有意见
scala文件
在这里,我使用解析器功能来生成代码2 + 3的抽象语法树。
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"误差
未能初始化编译器:对象scala未找到。**请注意,从2.8开始,scala并不假定使用java类路径。**对于旧行为,将-usejavacp传递给scala,或者如果以编程方式使用设置**对象,则settings.usejavacp.value = true。 scala.tools.nsc.CompilationUnits$CompilationUnit.的错误 java.lang.NullPointerException java.lang.NullPointerException( scala.tools.nsc.interpreter.ExprTyper$codeParser$.applyRule(ExprTyper.scala:22) at scala.tools.nsc.interpreter.ExprTyper$codeParser$.stmts(ExprTyper.scala:36) at scala.tools.nsc.interpreter.ExprTyper$$anonfun$parse$2.apply(ExprTyper.scala:47) at scala.tools.nsc.interpreter.ExprTyper$$anonfun$parse$2.apply(ExprTyper.scala:46) at scala.tools.nsc.reporters.Reporter.withIncompleteHandler(Reporter.scala:46) atscala.tools.nsc.interpreter.ExprTyper$class.parse(ExprTyper.scala:46) at scala.tools.nsc.interpreter.IMain$exprTyper$.parse(IMain.scala:1012) at scala.tools.nsc.interpreter.IMain.parse(IMain.scala:1013) at eu.semantiq.scalaToJS.Main$delayedInit$body.apply(Main.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$1scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) at scala.collection.immutable.List.foreach(List.scala:45) at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30) at scala.App$class.main(App.scala:60) at eu.semantiq.scalaToJS.Main$.main(Main.scala:5) at eu.semantiq.scalaToJS.Main$.main(Main.scala:5) at eusun.reflect.NativeMethodAccessorImpl.invoke0(Native方法的.semantiq.scalaToJS.Main.main(Main.scala) )在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) java.lang.RuntimeException:非零退出码:1 at scala.sys.package$.error(package.scala:27)
在scala中一切都是工作的
欢迎访问ScalaVersion2.9.0.1 (OpenJDK 64位服务器VM,1.6.0_23)。键入要对它们进行计算的表达式。类型:帮助获取更多信息。 进口scala> scala.tools.nsc._ 导入scala.tools.nsc._ scala> var i=新解释器 警告:有4次弃用警告;详细信息警告用-deprecation重新运行:有1次弃用警告;详细信息请用-deprecation重新运行。 i: scala.tools.nsc.Interpreter = scala.tools.nsc.Interpreter@786bfd73 scala> println(i.parse("2 + 3")) Some(List(2.$plus(3)))
我真的为我糟糕的英语感到难过
发布于 2012-02-17 16:55:26
根据xsbt的常见问题
sbt在与sbt本身相同的JVM中运行测试,Scala类与应用程序类不在同一个类加载器中。
还有更多:
关键是使用embeddedDefaults初始化解释器的设置。
这里给出的示例使用了一些任意类型的MyType。实际上,您可以使用任何类型来帮助sbt找到适当的类加载器(请参阅这个答案)。
因此,您的代码应该如下所示:
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"))
}https://stackoverflow.com/questions/9329948
复制相似问题