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")
答案 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的某个用例。