检查代码是否被更改

mk.*_*mk. 1 java

每当我的代码发生变化时,我想调用一些昂贵的更新方法.我在Eclipse中点击ctrl-s,这会触发文件保存和热代码替换,我的程序检查文件是否已保存,花费大约5秒钟处理数字,然后更新屏幕.

我正在使用这个东西,我每秒调用几次:

public static long lastSourceUpdate=0;
private static boolean wasUpdated() {
    File source = new File("/home/user/workspace/package/AClass.java"); 
    long t = source.lastModified();
    if (t>lastSourceUpdate+2000) { // wait for hcr
        lastSourceUpdate=t;
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这种方法存在问题:

  1. 检查文件是不可靠的,因为编译和热代码替换可以在文件更改后几秒钟完成.这就是为什么有超过2000毫秒的延迟.虽然该方法返回true,但我刚刚更改的代码未更新 - 或者更糟糕的是,Eclipse在数字运算中途更新了它,结果无可救药地被扰乱.
  2. 在任何情况下检查文件都是一个黑客,它应该检查类.磁盘可能不需要涉及.
  3. 它只检查一个类,但我有时想检查一个完整的包,或者对它没有任何改变.文件更改时,包目录的lastModified不会更改.对文件夹/包进行递归扫描会起作用,但如果包很大,则不是很优雅.
  4. 看起来很难看.

那么,检查代码何时更改的最佳方法是什么?或许反思?serialVersionUID检查?它不像类本身有compilationDate字段 - 或者它们呢?Eclipse更新了一些秘密价值吗?是否有Eclipse随每次保存而更改的文件?

谢谢你检查一下.

Mat*_*all 6

不要比较上次修改日期,而是尝试比较文件的MD5哈希值.