没有播放插件的Play Framework sbt-web集成

时间:2016-04-07 21:18:28

标签: playframework sbt-web

Embedding play as a library,我在项目中启用了sbt-web插件,并运行web-stage,使资产逐字复制到target/web/stage/。但是,使用Play Framework的string interpolation routing DSL如下所示,当匹配请求进入时,它们不会被提供:

object PlayServer extends App {
    val server = NettyServer.fromRouter() {   
      case GET(p"/public/$file*") => {
        val path = "/target/web/stage"
        Assets.at(path = path, file = file)
    }
}

通过播放代码handling Assets.at进行调试,看起来没有任何东西可以将资产变成target/scala-2.11/classes/下的资源,其中大概是播放框架试图将它们作为资源加载。运行sbt web-stage并没有特别注意这一点。

那么sbt-web管理如何处理将资产放在那里缺少什么?当手动放置在那里时,集成工作!!所以看来sbt-web在其默认配置中将资产置于错误的目标子目录中,就播放而言......

请注意,plugins.sbt我只在sbt-web中包含以下内容,这是否足够?

addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "latest.release")

1 个答案:

答案 0 :(得分:0)

将资源置于/src/main/resources/assets/下会在运行时将其复制到target,从而绕过任何花哨的sbt-web处理。这让你摆脱了基本开发的泥潭。

路线需要像这样调整:

case GET(p"/public/$file*") => {
  val path = "/assets"
  Assets.at(path = path, file = file)
}

设置适当的sbt-web管道以进行缩小或最终无法避免的任何事情,因此这不是一个真正的答案,但它解决了内部使用的应用程序使用play的某个用例。