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