【问题标题】:Play Framework and scala.tools.nsc播放框架和 scala.tools.nsc
【发布时间】:2012-05-25 09:43:56
【问题描述】:

我必须在 Play Framework 应用程序中使用 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 构建时有效。在 Play 中,它以 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
    
    )

}

【问题讨论】:

  • 您是否将其标记为库依赖项或构建级依赖项?无论如何,您可能希望将 Build.scala 文件添加到问题中。
  • 你在哪一行得到 NPE?
  • 另外,您的应用运行情况如何?
  • interpreter.parse(code) 出现错误

标签: scala sbt playframework-2.0


【解决方案1】:

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

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

如果您可以将必要的类路径传递到您的应用程序中,您可以自己显式配置类路径和类加载器,如下所示:

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)

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

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 2011-08-16
    • 2011-12-15
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2012-12-10
    相关资源
    最近更新 更多