ブートストラップを使用する play 2.0.2 (scala) プロジェクトがあります。ブートストラップを 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]
ブートストラップの img および js サブフォルダーをアセットとして (パブリックの静的なものと一緒に、または別のパスで) 提供し、bootstrap|responsive.less ファイルを css にコンパイルして同様に提供したいと考えています。
カスタム エントリ ポイントは正常に機能します。つまり、それらがすべて /app の下にあるように変更し、そこにブートストラップから少ないファイルを移動すると、機能します。画像とjsファイルをパブリックに移動すると、それも機能します。しかし、私が達成しようとしているのは、きれいな分離です。
playAssetsDirectories と playExternalAssets の使用方法を正しく理解していないことは確かです。これらの設定について多くのバリエーションを試しました。私がしようとしていることが可能かどうか、または設定がどのように関連する必要があるかはわかりません-たとえば、lessEntryPoint はアセット ディレクトリにある必要がありますか? また、externalAssets はアセット ディレクトリと見なされますか? 誰かが私が間違っているところを指摘できますか? 前もって感謝します。