2012-04-24 59 views
6

我正在使用dcevm + run-jetty-run + livereload,嘗試開發一個Web應用程序,而無需在修改Java源代碼時重新啓動jetty。如何讓jetty在重新加載修改後的類時阻止請求?

一切工作正常。當我修改一個java類時,livereload監視這個變化,並且觸發瀏覽器刷新打開的頁面以查看修改的結果。

但我發現它仍然不是那麼方便:當瀏覽器重新加載時,dcevm和jetty可能還沒有重新加載修改的類。我不得不手動刷新頁面,但我不確定它是否顯示修改後的結果,而不仔細檢查內容。

所以我不知道是否有任何方法讓我們修改了一些類並重新加載dcevm時阻止了請求。它會確保顯示的頁面始終被修改。

回答

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 */ 
} 
:沿線的

東西

相關問題