2012-04-24 9 views
6

Estoy usando dcevm + run-jetty-run + livereload, intento desarrollar una aplicación web sin reiniciar el muelle cuando modifique las fuentes de Java.¿Cómo dejar que jetty bloquee la solicitud al volver a cargar las clases modificadas?

Todo funciona bien. Cuando modifiqué una clase java, livereload supervisó el cambio y activó el navegador refrescando las páginas abiertas para ver el resultado modificado.

Pero encontré que todavía no es tan conveniente: cuando el navegador se recarga, dcevm y embarcadero pueden no haber vuelto a cargar esas clases modificadas todavía. Tengo que actualizar manualmente la página de nuevo, pero no estoy seguro si muestra el resultado modificado esta vez, sin verificar el contenido cuidadosamente.

Así que me pregunto si hay alguna forma de dejar que jetty bloquee la solicitud cuando modifique algunas clases y dcevm se vuelva a cargar. Se asegurará de que las páginas mostradas se modifiquen siempre.

Respuesta

1

Quizás sea demasiado raro para su paladar, pero podría insertar un fragmento de inicialización estático en sus fuentes Java para actualizar un archivo conocido y separado después de volver a cargar. Than livereload puede ver ese archivo por separado en lugar de dejarlo funcionar directamente en las fuentes .java.

Algo a lo largo de las líneas de:

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 */ 
} 
Cuestiones relacionadas