0
私はSBT-WebとPlay Frameworkをベースにしたプロジェクトを持っています。まあ、Playは開発のためだけに使用され、その後(SBT/Activatorでstage
コマンドを実行すると)すべてが静的ページにエクスポートされ、Javaがインストールされていない可能性があるWebサーバーに展開されます。SBT 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コードが既にコンパイルされていることを保証していますか?
- ヒント:プロジェクトルートにファイルを生成し、開発モードでルート上で動的に配信し、パイプラインステージで名前を変更します。これは重大なハックですが、理論的にはうまくいくはずです。