检查代码是否被更改

时间:2011-06-17 19:11:15

标签: 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;
}

这种方法存在问题:

  1. 检查文件是不可靠的,因为编译和热代码替换可以在文件更改后几秒钟完成。这就是为什么有超过2000毫秒的延迟。虽然该方法返回true,但我刚刚更改的代码没有更新 - 或者更糟糕的是,Eclipse在数字运算中途更新了它,结果是无可救药地加扰。
  2. 在任何情况下检查文件都是黑客攻击,它应该检查类。磁盘可能不需要介入。
  3. 它只检查一个类,但我有时想检查一个完整的包,或者对它失败,根本不需要对项目进行任何更改。文件更改时,包目录的lastModified不会更改。对文件夹/包进行递归扫描会起作用,但如果包很大,则不是很优雅。
  4. 看起来很难看。
  5. 那么,检查代码何时更改的最佳方法是什么?或许反思? serialVersionUID检查?它不像类本身有compilationDate字段 - 或者它们呢? Eclipse更新了一些秘密价值吗?是否存在Eclipse随每次保存而更改的文件?

    感谢您查看此内容。

1 个答案:

答案 0 :(得分:6)

尝试比较文件的MD5 hashes,而不是比较上次修改日期。