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 для внутренних приложений.

Другие вопросы по тегам