Как ссылаться на экспортированные активы в мультимодульном игровом проекте
У меня есть многомодульный проект Play Framework с двумя модулями, common
который является стандартным проектом, содержащим повторно используемый код и ресурсы, и app
это игровой проект, который я пытаюсь запустить. Используя плагин Sbt-Web, я могу создавать и изменять ресурсы в common/src/main/public
которые копируются в папку app/target/web/web-modules/main/webjars/lib/common
каждый раз, когда приложение перезагружается. Моя проблема связана со ссылками на эти ресурсы в моих представлениях Play. мой routes
файл содержит строки
GET /assets/*file controllers.Assets.at(path="/public", file)
GET /webjars/*file controllers.WebJarAssets.at(file)
и я пытаюсь получить доступ к этим экспортированным активам в моем index.scala.html
файл в app
например,
<link rel="stylesheet" media="screen" href="@routes.WebJarAssets.at(WebJarAssets.locate("common/css/directives.css"))">
Этот файл существует в app/target/web/web-modules/main/webjars/lib/common/css/directives.css
но WebJarAssts.locate
возвращается
{"status":{"errors":[{"message":"common/css/directives.css could not be found. Make sure you've added the corresponding WebJar and please check for typos."}]}}
Я попытался указать все больше и меньше пути, а также получить доступ к нему в качестве стандартного актива через Assets.at
, но не повезло. Кто-нибудь знает, как правильно ссылаться на экспортируемые активы?
Соответствующие строки из моего build.sbt
файл
val playVersion = play.core.PlayVersion.current
lazy val common = project.enablePlugins(SbtWeb, SbtTwirl).settings(
libraryDependencies ++= Seq(
"com.typesafe.play" %% "play" % playVersion % "provided",
)
)
lazy val app = project.enablePlugins(PlayJava).settings(
libraryDependencies ++= Seq(
"org.webjars" %% "webjars-play" % "2.3.0"
)
).dependsOn(common % "compile->compile;test->test")
lazy val suite = project.in(file(".")).aggregate(common, app)
1 ответ
Я считаю, что нашел правильный способ использования своих экспортируемых активов. Я был на неверном пути, рассматривая их как веб-фляги в моих представлениях Play; документация Sbt-Web немного вводит меня в заблуждение в этом отношении:
Ресурсы экспортируются в формате webjar и импортируются так же, как и другие зависимости webjar.
Оказывается, что экспортируемые активы доступны в двух местах, (1) в app/target/web/web-modules/main/webjars/lib/common
как описано в моем вопросе и (2) в app/target/web/public/main/lib/common
, Я не смог получить доступ к первому с помощью плагина webjar-play, но последний доступен как обычный ресурс, например:
<link rel="stylesheet" media="screen" href="@routes.Assets.at("lib/common/css/directives.css")">
Насколько я понимаю, это также будет работать в производстве.