2

sbtwithを使用しxsbt-web-pluginて、liftweb アプリを開発しています。私たちのプロジェクトビルドにはいくつかのサブプロジェクトがあり、すべてのサブプロジェクト間でいくつかのものを共有するためdependenciesに を使用しています。Project

object ProjectBuild extends Build {
//...

lazy val standalone = Project(
  id = "standalone",
  base = file("standalone"),
  settings = Seq(...),
  dependencies = Seq(core) // please notice this
)

lazy val core = Project(
  id = "core",
  base = file("core"),
  settings = Seq(...)
}
// ...
}

開発を容易にするために、'project standalone' '~;container:start; container:reload /'変更されたファイルを自動的に再コンパイルするコマンドを使用します。

core共有プロジェクトからもいくつかの共通アセットを提供することにしました。これはリフトでうまく機能します。しかし、ファイルをcore/src/main/resources/toserveフォルダーに追加したときに直面したのは、javascript または css ファイルを変更すると、アプリケーションが jetty を再起動することです。このようなリロードには多くのリソースが必要になるため、これは面倒です。

そこで、これを防ぐ方法について調査を開始しwatchSources、変更されたファイルをスキャンする sbt タスクについて言及している人を見つけました。

ただし、このコードをwatchSources変更 (すべてのファイルを印刷するイベント) として追加しても、フォルダーprintlnにあるアセットを変更するたびに webapp をリロードすることはできません。core resources

lazy val core = Project(
  id = "core",
  base = file("core"),
  settings = Seq(
    // ...
    // here I added some tuning of watchSources
    watchSources ~= { (ws: Seq[File]) => ws filterNot { path =>
      println(path.getAbsolutePath)
      path.getAbsolutePath.endsWith(".js")
    } }
 )

にも追加しようとしexcludeFilterましたがunmanagedSorcesunmanagedResorcesうまくいきませんでした。

私は sbt の専門家ではないので、このような設定の変更は (通常のコードというよりも) 魔法のように思えます。また、そのような調整はドキュメントで明らかにされているようです =(アセットファイルが変更されるたびに sbt が webapp をリロードするのを防ぐために誰か助けてくれませんか?

どうもありがとう!

4

2 に答える 2