Play Framework sbt-web интеграция без игрового плагина
Встраивая play как библиотеку, я включил плагин sbt-web в свой проект и запустил web-stage
, делая активы дословно скопированными в target/web/stage/
, Однако, используя DSL маршрутизации строковой интерполяции Play Framework следующим образом, они не обслуживаются, когда поступает соответствующий запрос:
object PlayServer extends App {
val server = NettyServer.fromRouter() {
case GET(p"/public/$file*") => {
val path = "/target/web/stage"
Assets.at(path = path, file = file)
}
}
Отладка через обработку игрового кода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")
1 ответ
Размещение активов под /src/main/resources/assets/
копирует их в target
после запуска, минуя любую причудливую обработку sbt-web. Это выводит вас из грязи для базового разработчика.
Маршрут нужно адаптировать так:
case GET(p"/public/$file*") => {
val path = "/assets"
Assets.at(path = path, file = file)
}
Настройка правильного конвейера sbt-web для минимизации или чего-либо другого в конечном итоге не может быть предотвращена, поэтому это не совсем ответ, но он решает определенный вариант использования, используя play для внутренних приложений.