我有一个使用引导程序的 play 2.0.2 (scala) 项目。我已将 bootstrap 添加为 git 子模块,以便我可以轻松更改其版本,而无需复制各个文件。
我的项目结构如下:
project
|_ bootstrap
| \_ img
| \_ js
| \_ less
| \_ bootstrap.less
| \_ responsive.less
|_ app
\_ assets
\_ css
\_ my.less
我的 Build.scala 有:
def customLessEntryPoints(base: File): PathFinder = (
(base / "app" / "assets" / "css" * "*.less") +++
(base / "bootstrap" / "less" / "bootstrap.less") +++
(base / "bootstrap" / "less" / "responsive.less")
)
def externalAssets(base: File): PathFinder = (base / "bootstrap")
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
playAssetsDirectories <+= baseDirectory / "bootstrap",
playExternalAssets <+= baseDirectory.apply(file => (file, externalAssets(_), "bootstrap")),
lessEntryPoints <<= baseDirectory(customLessEntryPoints)
// other settings
)
当我在执行“~ run”后访问 Web 应用程序时,(或者如果我运行 play-copy-assets)我得到:
[error] {file:/<path_to_project>/}<project>/*:play-copy-assets: No mapping for <path_to_project>\bootstrap\less\bootstrap.less
[error] application -
! Internal server error, for request [GET /] ->
play.api.UnexpectedException: Unexpected exception [RuntimeException: No mapping for <path_to_project>\bootstrap\less\bootstrap.less]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$4$$anonfun$apply$12.apply(PlayReloader.scala:233) ~[na:na]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$4$$anonfun$apply$12.apply(PlayReloader.scala:226) ~[na:na]
at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.3]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$4.apply(PlayReloader.scala:226) ~[na:na]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$4.apply(PlayReloader.scala:224) ~[na:na]
at scala.Either$LeftProjection.map(Either.scala:183) ~[scala-library.jar:0.11.3]
java.lang.RuntimeException: No mapping for <path_to_project>\bootstrap\less\bootstrap.less
at scala.sys.package$.error(package.scala:27) ~[scala-library.jar:na]
at scala.Predef$.error(Predef.scala:66) ~[scala-library.jar:0.11.3]
at sbt.Mapper$$anonfun$fail$1.apply(PathMapper.scala:26) ~[na:na]
at sbt.Mapper$$anonfun$fail$1.apply(PathMapper.scala:26) ~[na:na]
at sbt.Alternatives$$anon$1$$anonfun$$bar$1$$anonfun$apply$3.apply(PathMapper.scala:61) ~[na:na]
at sbt.Alternatives$$anon$1$$anonfun$$bar$1$$anonfun$apply$3.apply(PathMapper.scala:61) ~[na:na]
我希望将 bootstrap 的 img 和 js 子文件夹用作资产(与公共静态文件一起或在不同的路径中),并将 bootstrap|responsive.less 文件编译成 css 并提供。
自定义入口点工作正常。也就是说,如果我更改它们,使它们都在 /app 下并将较少的文件从引导程序移到那里,它们就可以工作。如果我在公共下移动图像和 js 文件,那也可以。但我想要实现的是干净的分离。
我很确定我没有正确理解如何使用 playAssetsDirectories 和 playExternalAssets,我已经为这些设置尝试了许多变体。我不确定我正在尝试的内容是否可行或设置应该如何关联 - 例如,lessEntryPoint 是否必须位于资产目录中,并且 externalAssets 是否被视为资产目录?谁能指出我哪里出错了?提前致谢。