2011-06-17 15 views
1

コードが変更されるたびに、いくつかの高価な更新メソッドを呼び出す必要があります。 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. は、コードの置き換えは、ファイルが変更されてから数秒で完了します。そのため、上記の2000msの遅延があります。このメソッドがtrueを返すにもかかわらず、私が変更したコードは更新されません - あるいは悪いことに、Eclipseは数値の途中でそれを更新し、結果は絶えず混乱します。
  2. ファイルを検査することはどんな場合でもハックです。クラスをチェックする必要があります。おそらくディスクは関与する必要はありません。
  3. これは1つのクラスだけをチェックしますが、パッケージ全体をチェックしたり、プロジェクトに何か変更を加えたりすることがあります。ファイルが変更されると、パッケージディレクトリのlastModifiedは変更されません。フォルダ/パッケージの再帰スキャンは機能しますが、パッケージが巨大であればあまり優雅ではありません。
  4. Looks ugly。

コードが変更されたときに確認するにはどうすればよいでしょうか?おそらく反射? serialVersionUIDチェック?クラス自体がcompilationDateフィールドを持っているのと同じではありませんか? Eclipseが更新する秘密の価値はありますか? Eclipseが保存ごとに変更するファイルはありますか?

ありがとうございます。

+1

このEclipse機能をコーディングしていますか?または日食を使用して、これを取り除きたいですか?後で、ビルド時にビルドを無効にして、自分のビルドアイコン(ビルドアイコンをクリック)が来たらビルドしてください。 – OscarRyz

+2

他のすべてのビルドが完了した後に起動するEclipseビルダーとしてこれを実装できますか?変更されたものを完全にチェンジセットして、高価なファイルチェックに頼る必要はありません。 – MRalwasser

+0

これは日食特有の問題ではありません。私はJavaプログラムが、Eclipseのデバッグのホットコードの置き換え、または他の手段を介して発生する可能性のあるコードが変更されたことを知りたがっています。 @MR Eclipseビルダーは自分のプログラムと簡単にやり取りできますか? –

答えて

6

最後に変更された日付を比較する代わりに、ファイルのMD5 hashesを比較してみてください。

+0

素晴らしいアイデア!ありがとう。 – asgs

+0

これはまったく動作しません。変更日付は、MD5ハッシュとまったく同様に信頼性があります。まったく同じ問題が発生します。ホットコードを置き換える前にファイルが更新されます。あなたがチェックするためにファイル全体を読む必要があるので、さらに悪いことです。 –

関連する問題