/ /パブリックフォルダの下の変更が自動リロードを引き起こすのはなぜですか? - java、プレイフレームワーク-2.0、sbt

パブリックフォルダの下の変更が自動リロードをトリガするのはなぜですか? - java、playframework-2.0、sbt

私は現在Play Framework 2.3.0とAngularJSを使ってWebアプリを開発しています。 /public 私のAngularJSアプリを提供するPlay Frameworkのフォルダ。

私が開発中に行ったすべての変更はPlayによる完全なリロードを引き起こします、それは私が時間のかかる計算をしているのでちょっと面倒です。 Global.beforeStart 方法。

なぜ、それはなぜ自動リロードを引き起こすのですか。 Play 2.3.0のドキュメント 言う:

に格納されているリソース public ディレクトリは静的アセットです。 Webサーバーによって直接提供されます。

自動リロード機能を無効にする方法に関するアイデア public フォルダ?

編集:もう一つの考え:外部フォルダからリソースを提供する方法はあります。 Assets コントローラ?

回答:

回答№1は0

私は私のbuild.sbtに以下を追加しました:

    watchSources := (watchSources.value
--- baseDirectory.value / "public"     ** "*").get

監視されているフォルダの一覧から "/ public"が削除されます。これが問題を起こすかもしれないことに注意してください、しかし問題が解決されるまでそれは素晴らしい回避策です。


回答№2の場合は3

再読み込みは ない 引き起こされた ソース ファイルの変更、それらはによって引き起こされます クラスパス 変更します。もちろん、ソースファイルの変更はクラスパスの変更を引き起こすかもしれませんが、そうではないかもしれません。

Playのランモードは、すべての人に注目する方法です。ソースファイルの変更。これにはパブリックディレクトリおよびアセットへの変更も含まれます。これらに対して処理が必要になる可能性があるためです。変更があるたびに、sbtに再コンパイルを要求します - これは静的なアセットとscala / javaファイルを含むすべてのものを再コンパイルすることを意味します。

sbtは再コンパイル時にインクリメンタルを使用しますコンパイル - つまり、最後のコンパイルの結果を保存し、最後のコンパイル以降に新しい作業が必要かどうかを調べます。ない場合は、コンパイルをスキップします。

リソースディレクトリからクラスパスにリソースをコピーする場合も同様です。

Playがsbtに再コンパイルを依頼した後、それはそれからチェック - クラスパスに変更はありましたか?あれば、リロードします。しかし、変更したのがJavaScriptファイルだけであれば、そうではありませんでした。

しかし、あなたは「変化する唯一の人ではないfiles - SBTが自分用のファイル、おそらくJava / Scalaソースファイル、あるいはconfディレクトリ内のリソースのいずれかを生成するように設定されている場合、これを実行する必要があるかどうかにかかわらずかどうか - まあこれはクラスパスの変更かもしれません。

それで、あなたの問題を解決するために、どんなタスクでもチェックしてくださいそれらがソースやリソースを生成しているかどうかを確認するために、あなたは「書いた、またはあなたが使っているプラ​​グイン」を使います。もしそうであり、それについて頭が良くない、すなわち必要としないときに同じファイルを再生成するのであれば、ソースファイルが変更されるたびにPlayが再ロードすることになりますsbtが再コンパイルされると、ファイルが再生成され、クラスパスが変更されます。


回答№3の場合は0

たぶんあなたは(または)BuildInfoPluginを使用していましたか? (あるいは、この質問を見つけた人は使ってください)

私が何かに触れたときはいつでも、Play Frameworkはいつも私のために再開していました public/。結局、私はSBT BuildInfoPluginを使っているからだと気づいた https://github.com/sbt/sbt-buildinfoそして、それがビルドタイムスタンプを含むように設定していた git status生成されたビルド情報内。ビルド情報のこれらの部分を削除した後、Playは変更後に再コンパイルまたは再ロードしなくなりました。 public/.

これはSBT 0.13.15とSBT 1.1.1、そしてPlay Framework 2.6.9と2.6.12にあります。

これは私が削除したものです:
buildInfoOptions += BuildInfoOption.BuildTime
そして:
BuildInfoKey.action("gitStatus") { "git status".!!.trim }).

(設定する必要はありませんでした watchSources または playMonitoredFiles Recopmiling&reloadingを停止するPlayの場合)