6

我正在使用dcevm + run-jetty-run + livereload,尝试在修改 java 源代码时开发 Web 应用程序而不重新启动 jetty。

一切正常。当我修改一个java类时,livereload监听到了变化,并触发浏览器刷新打开的页面来查看修改结果。

但我发现它仍然不那么方便:当浏览器重新加载时,dcevm 和 jetty 可能还没有重新加载修改后的类。我不得不再次手动刷新页面,但我不确定这次是否显示修改后的结果,没有仔细检查内容。

所以我想知道当我修改一些类并且 dcevm 正在重新加载时,有什么方法可以让码头阻止请求。它将确保始终修改显示的页面。

4

1 回答 1

1

对于您的口味来说,这可能太 hacky,但是您可以在 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 */
}
于 2013-09-26T08:46:11.093 回答