2012-12-17 20 views
5

私はgrailsインタラクティブモードで実行しているgrailsアプリケーションを持っています。このアプリケーションにはservice、tagLibs、gspsなどが含まれていますが、最も重要なのはgroovyファイルがsrc/groovyフォルダに入っていることです。Grailsの静的文字列対話モード

これらのグルーヴィーなファイルの一つがAppConstants.groovyと呼ばれ、静的変数の多くが含まれていますが、私は何の問題を取得していない非対話型モードでこれを実行している場合、この変数に加えられた更新がある

public static final String VARIABLE1 = "VARIABLE VALUE" 

、すなわち実行中のアプリケーションに反映されます。ただし、インタラクティブモードでVARIABLE1変数に加えた変更は、exitrun-appに電話してもアプリに反映されません。変更が反映されるためには、対話モードを終了して再起動する必要があります。

最初はこれがキャッシュの問題であり、静的な最終変数がキャッシュされていると考えられ、JVMが再起動されていないので、このキャッシュは決して更新されませんでした。私はしかし、新しい変数を追加することは、前にアプリケーションに存在しなかったものが、対話モードが再開されるまで、アプリケーションの残りの部分では利用できないことに気付きました。

これの背後にある理由は何ですか?クラスはコンパイルされているので、対話型のコンソールでこれを見ることができます。アプリケーションに変更が反映されることを期待しています。実行中ではなく、少なくともexitrun-appが続きます。

追加情報:Grailsのバージョン2.1.0

+0

インタラクティブモードでは、ファイルが変更されていない可能性がありますか?あなただけのアプリを実行する場合は、 "コンパイル1ソースファイル"というメッセージが表示されますか? –

+0

私が言及したように、それはファイルをコンパイルします。しかし、再コンパイル、ストップ、ランアプリの後でさえ、クリーンの後でも静的な最終的なストリングの編集や追加を認識しません対話モードを完全に再開するまで –

答えて

1

は少しテストを行なったし、ここで私が見つけたものです:-reloadingせずに処理を開始する

  1. は、変数を更新することはできません - そうgrails -reloadingまたはgrails -reloading run-app

  2. final変数を開始するときに正しく読み込まれる必要があります上記のように。だからpublic static String VARIABLE1 = "VARIABLE VALUE"は私が値を更新するときにリロードして表示します

  3. final変数がリロードされませんでした。したがって、public static final String VARIABLE1 = "VARIABLE VALUE"はリロードせずに新しい値を表示します。

私はさらにいくつかの変数を作成しました。いくつかはfinalであり、そうでないものもあります。私が-reloadingを使用している限り、finalの変数はリロードされますが、finalはそうではありません。このシナリオVARIABLE1

public static final String VARIABLE1 = "VARIABLE VALUE" 
public static String VARIABLE2 = "NON FINAL VARIABLE VALUE" 

再起動するまで変更しないだろう - VARIABLE2変更を更新して保存するとき。

+0

情報をお寄せいただきありがとうございます。私はしばらくして誰かに入力があり、最終的な変数についての解決策があるかどうかを確認します。 –

関連する問題