2012-04-24 9 views
6

Używam dcevm + run-jetty-run + livereload, spróbuj stworzyć aplikację internetową bez restartowania pomostu podczas modyfikowania źródeł java.Jak pozwolić pomoście blokować żądanie przy ponownym ładowaniu zmodyfikowanych klas?

Wszystko działa poprawnie. Kiedy zmodyfikowałem klasę Java, livereload monitorował zmianę i uruchomił przeglądarkę odświeżając otwarte strony, aby zobaczyć zmodyfikowany wynik.

Ale okazało się, że nadal nie jest to wygodne: po ponownym załadowaniu przeglądarki dcevm i pomost mogły jeszcze nie załadować jeszcze zmodyfikowanych klas. Muszę ręcznie odświeżyć stronę, ale nie jestem pewien, czy pokazuje ona tym razem zmodyfikowany wynik, bez dokładnego sprawdzania zawartości.

Zastanawiam się, czy istnieje sposób na to, aby pomost blokował żądanie, gdy zmieniłem niektóre klasy i przeładowałem dcevm. Zapewni to, że wyświetlane strony będą zawsze modyfikowane.

Odpowiedz

1

To może być zbyt hacky dla podniebienia, ale można wstawić statyczny fragment inicjujący w źródłach Java, aby zaktualizować znany, oddzielny plik po ponownym załadowaniu. Następnie livereload może oglądać ten oddzielny plik zamiast pozwolić mu działać bezpośrednio na źródłach .java.

Coś wzdłuż linii:

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 */ 
} 
Powiązane problemy