2016-04-07 34 views
0

Embedding play as a library,我在我的項目中啓用了sbt-web插件,並運行web-stage,使資產逐字複製到target/web/stage/。然而,使用播放Framework的string interpolation routing DSL如下,他們當匹配請求到來時,不會投放:播放框架sbt-web集成不帶播放插件

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在其默認配置中將資產置於錯誤的目標子目錄中,就Play而言......

請注意,在plugins.sbt中,我只包含來自sbt-web的以下內容, ?

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

回答

0

配售資產/src/main/resources/assets/下,讓他們在運行復制到target,繞過任何花哨的SBT-網處理。這讓你擺脫基本開發的泥潭。

路線需要適應像這樣:

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

建立一個適當的SBT-網絡管道進行縮小或無法最終避免什麼,因此這是不是一個真正的答案,但它解決了一定的使用案例使用播放內部使用的應用程序。