我正在使用dcevm + run-jetty-run + livereload ,尝试开发一个网络应用,而无需在修改java源时重新启动jetty。
一切正常。当我修改java类时,livereload会监视更改,并触发浏览器刷新打开的页面以查看修改后的结果。
但是我发现它仍然不那么方便:当浏览器重新加载时,dcevm和jetty可能还没有重新加载修改过的类。我必须再次手动刷新页面,但我不确定这次是否显示修改后的结果,而不仔细检查内容。
所以我想知道当我修改一些类并且dcevm正在重新加载时,有没有办法让jetty阻止请求。它将确保显示的页面始终被修改。
答案 0 :(得分: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 */
}