2016-10-16 15 views
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コードが既にコンパイルされていることを保証していますか?
  • ヒント:プロジェクトルートにファイルを生成し、開発モードでルート上で動的に配信し、パイプラインステージで名前を変更します。これは重大なハックですが、理論的にはうまくいくはずです。

答えて

関連する問題