我有一个包含两个模块的多模块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)
答案 0 :(得分:1)
我相信我找到了使用我的导出资产的正确方法。我在Play视图中将它们视为webjars,这是错误的轨道; Sbt-Web documentation在这方面对我有点误导:
资产以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")">
据我所知,这也适用于制作。