3

私は現在プレイに取り組んでいます!複数のサブプロジェクトを定義する 2.1.1 アプリケーション。ここに私の Build.scala があります:

val lfamName = "lfam"
val lfamVersion = "1.0-SNAPSHOT"
val lfamDirectory = "subprojects/" + lfamName
lazy val lfam = play.Project(lfamName, lfamVersion, appDependencies, path = file(lfamDirectory))

val mainName = "main"
val mainVersion = "1.0-SNAPSHOT"
lazy val main = play.Project(mainName, mainVersion, appDependencies)
            .settings().dependsOn(lfam).aggregate(lfam)

結果の構造:

app
  └ controllers
    └> Application.scala
  └ models
  └ views
    └> index.scala.html
  └ assets
    └ stylesheets
      └> main.less
conf
  └> application.conf
  └> routes
subprojects
  └ lfam
    └ conf
      └> lfam.routes
    └ app/controllers
      └> Application.scala
      └> Assets.scala
    └ app/models
    └ app/views
      └> index.scala.html
    └ assets
      └ stylesheets
        └> main.less

情報源 :

ルート

GET     /                           controllers.Application.index

-> /lfam lfam.Routes

GET     /assets/*file               controllers.Assets.at(path="/public", file)

lfam.routes

GET     /                           controllers.lfam.Application.index

GET     /assets/*file               controllers.lfam.Assets.at(path="/public", file)

Assets.scala

package controllers.lfam
object Assets extends controllers.AssetsBuilder

Application.scala (プロジェクト間でパッケージ名が変わるだけ)

package controllers(.lfam)

import play.api._
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok(views.html.index())
  }

}

main.less (メイン プロジェクト)

@main-color: #0000ff;

h1 {
  color: @main-color;
}

main.less (lfam プロジェクト)

@main-color: #ff0000;

h1 {
  color: @main-color;
}

index.scala.html (メイン プロジェクト)

<!DOCTYPE HTML>
<html>
    <head>
        <link rel="stylesheet" href="@routes.Assets.at("stylesheets/main.css")">
    </head>
    <body>
        <h1>Header</h1>
    </body>
</html>

index.scala.html (lfam プロジェクト)

<!DOCTYPE HTML>
<html>
    <head>
        <link rel="stylesheet" href="@lfam.routes.Assets.at("stylesheets/main.css")">
    </head>
    <body>
        <h1>Header</h1>
    </body>
</html>

サブプロジェクトのインデックスが表示されているとき (/lfam/)、ヘッダーはまだ青色です。しかし、main.less ファイルの名前をサブプロジェクトから lfam.less (および html で対応するもの) に変更すると、ヘッダーは (予想どおり) 赤くなります。

複数のサブプロジェクトに複数のアセットを同じ名前で持つことは可能ですか? 最初のケースで play が正しい css ファイルを提供しないのに、2 番目のファイルを見つけるのはどうしてですか?

ありがとう

4

1 に答える 1

1

マルチプロジェクト設定のすべてのプロジェクトが同じ classloader を使用するため、これは不可能です。

アセットはClassLoader.getResource (source)を使用してロードされます。Java ソース コードと同様に、完全修飾リソース名は一意である必要があります。

于 2014-01-27T21:19:35.880 に答える