1

SBT-Web と Play Framework に基づくプロジェクトがあります。Play は開発のためだけに使用され、( stageSBT/Activator でコマンドを実行すると) すべてが静的ページにエクスポートされ、Java がインストールされていない Web サーバーにデプロイされます。

私の現在のアプローチは、resourceGenerator を追加することです。

resourceGenerators in Assets += Def.task {
  for(year <- PageGenerator.Years) yield {
    val file = (resourceManaged in Assets).value / "assets" / s"${year.year}.html"
    println(s"Writing $file…")
    IO.write(file, PageGenerator.forYear(year))
    file
  }
}.taskValue

これは今のところ機能しますが、いくつかの欠点があります。

  • 何よりもまず、サブディレクトリを使用できません。ファイルをサブディレクトリに配置しようとすると、ルートに配置されます。
  • テンプレートまたはソース データを変更すると、有効にするためにプロジェクトをリロードする必要があります。
  • 最後に、Twirl などを使用していただければ幸いです。

それらの欠点を克服する方法は?(最初のものが最も重要です。他の欠点を解決することは、むしろ小さな利点です。)

  • 生成コードをパイプライン ステージに配置しようとしました。これは、最終成果物を構築するときに機能しますが、開発中は機能しません。
  • アイデア: Twirl テンプレートを使用し、開発中に動的に呼び出し、パイプライン ステージで何らかの方法で (ClassLoader と Reflection API を使用して) 呼び出します。これが正しい方法かどうかはわかりません。sbt-web パイプライン ステージを実行するときに、Scala/Twirl コードが既にコンパイルされていることは保証されていますか?
  • ハックなアイデア: ファイルをプロジェクト ルートに生成し、開発モードでルートを介して動的に提供し、パイプライン ステージで名前を変更します。これは重いハックですが、理論的にはうまくいくはずです。
4

2 に答える 2