6

私はdcevm + run-jetty-run + livereloadを使用しています。Javaソースを変更するときに jetty を再起動せずに Web アプリを開発してみてください。

すべて正常に動作します。Java クラスを変更すると、livereload が変更を監視し、ブラウザーが開いているページを更新して変更結果を表示するようにトリガーしました。

しかし、それでもそれほど便利ではないことがわかりました。ブラウザーをリロードすると、dcevm と jetty は、変更されたクラスをまだリロードしていない可能性があります。もう一度ページを手動で更新する必要がありますが、コンテンツを注意深く確認せずに、今回は変更された結果が表示されるかどうかわかりません。

したがって、いくつかのクラスを変更し、dcevm がリロードしているときに、jetty にリクエストをブロックさせる方法はあるのでしょうか。表示されるページが常に変更されるようにします。

4

1 に答える 1

1

あなたの口には難しすぎるかもしれませんが、静的な初期化スニペットを Java ソースに挿入して、リロード後に既知の別のファイルを更新することができます。livereload は、.javaソースで直接動作させるのではなく、その個別のファイルを監視できます。

次のようなもの:

public class ReloadUtils {
  public static void notifyUpdate(String className) {
    String baseDir = System.getProperty("DEV_MODE_BASEDIR") + "/";
    File file = new File(baseDir + className + ".updated");
    FileWriter fw = new FileWriter(file.getAbsoluteFile(), false); // overwrite instead of append
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(Long.toString(System.currentTimeMillis()));
    bw.close();
  }
}

public class Reloadable {

  private final static boolean DEV_MODE = System.getProperty("DEV_MODE").equals("true");

  static {
    // static finals trigger most compilers to remove the statements in this case
    if (DEV_MODE) { 
      ReloadUtils.notifyUpdate(Reloadable.class.getName());
    }
  }

  /* lots of useful stuff */
}
于 2013-09-26T08:46:11.093 に答える