Play Framework和scala.tools.nsc

Play Framework和scala.tools.nsc,scala,sbt,playframework-2.0,Scala,Sbt,Playframework 2.0,我必须在Play框架应用程序中使用scala解析器 import scala.tools.nsc._ trait Foo class Parser { def parse(code: String) = { val settings = new Settings settings.embeddedDefaults[Foo] val interpreter = new Interpreter(settings) interp

我必须在Play框架应用程序中使用scala解析器

import scala.tools.nsc._

trait Foo
class Parser {
    def parse(code: String) = {
        val settings = new Settings
        settings.embeddedDefaults[Foo]
        val interpreter = new Interpreter(settings)
        interpreter.parse(code)
    }
}
我在Build.scala中有以下依赖项

"org.scala-lang" % "scala-compiler" % "2.9.1"
此代码在使用SBT构建时有效。在游戏中,它以NullPointerException结束,并且:

未能初始化编译器:找不到对象scala

**请注意,从2.8开始,scala不假定使用java类路径

**对于旧的行为,将-usejavacp传递给scala,或者如果使用设置

**对象编程设置为settings.usejavacp.value=true

Build.scala

import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "com.qwerty.utils"
    val appVersion      = "1.0-SNAPSHOT"
    val scalaVersion    = "2.9.1"

    val appDependencies = Seq(
        "org.scala-lang" % "scala-compiler" % "2.9.1"
    )
    
    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
      // Add your own project settings here
    
    )

}

有关
embeddedDefaults
的背景信息,请参阅

容器(Play)必须定义“app.class.path”和“boot.class.path”资源,然后
embeddedDefaults
将使用它们为环境正确配置解释器。因此,这是对游戏的增强

如果您可以将必要的类路径传递到应用程序中,那么您可以使用以下内容显式地配置类路径和类加载器:

val settings = new Settings
settings.classpath.value = "<classpath>"
settings.bootclasspath.value =
  settings.bootclasspath.value + File.pathSeparator +
  "<extra-bootclasspath>"
val interpreter = new Interpreter(settings) {
    override def parentClassLoader = classOf[Foo].getClassLoader
}
interpreter.parse(code)
val设置=新设置
settings.classpath.value=“”
settings.bootclasspath.value=
settings.bootclasspath.value+File.pathSeparator+
""
val解释器=新解释器(设置){
重写def parentClassLoader=classOf[Foo].getClassLoader
}
解释器解析(代码)

引导类路径通常应该包含scala-library.jar,类路径应该包含应用程序jar。

您是否将其标记为库依赖项或构建级依赖项?无论如何,您可能需要将Build.scala文件添加到问题中。您在哪一行获得NPE?另外,您是如何运行应用程序的?我在
解释器中遇到错误。parse(code)