2012-04-24 12 views
6

私はdcevm + run-jetty-run + livereloadを使用していますが、Javaソースを変更するときにjettyを再起動せずにWebアプリケーションを開発しようとします。変更されたクラスを再読み込みするときにjettyがリクエストをブロックする方法?

すべて正常です。 Javaクラスを変更すると、livereloadは変更を監視し、開いたページをリフレッシュして変更された結果を表示するようブラウザをトリガしました。

しかし、まだ便利ではないことがわかりました。ブラウザがリロードしたときに、dcevmとjettyがその変更されたクラスをまだリロードしていない可能性があります。手動でページを再度リフレッシュする必要がありますが、内容を注意深くチェックすることなく今回修正した結果が表示されるかどうかはわかりません。

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

答えて

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 */ 
} 
関連する問題