Web で公開しました：

http://sourceforge.jp/projects/fcfinder/



最終更新日：2011/10/15

== 必要なもの
* jdk1.6 のいずれか
* fcfinder.jar


== 使い方
1.fcfinder.jar を実行 ("java -jar fcfinder")
2.結果は '-jdb' option で指定したディレクトリへ格納されます

* オプションの指定方法が若干変わりました
+ 必須（いずれか）
 * -l
  * 言語を指定可能．'JAVA' 'C' 'CPP' のいずれか１つ以上を指定（'C' ⊃ 'CPP'）
  * このオプションを使って指定した言語で書かれているファイルに対しては次の正規化が行われる
   * コメントの除去
   * 空白の正規化
 * -a
  * 拡張子を見ずにすべてのファイルを解析する。
  * '-l'オプションで指定された言語で書かれているファイルについては正規化が行われる
+ 必須（いずれか）
 * -d
  * 直接ディレクトリパスを指定（複数可）
 * -dl
  * ディレクトリパスのリストを記述したファイルを指定
  * template: xml/dir_list.xml, xml/dir_list.txt
 * -fl
  * ファイルパスのリスト (.xml) を記述したファイルを指定
  * template: xml/file_list.xml
+ オプション
 * -o
  * 指定したファイルパスへ、クローンと判断したファイルをcsvフォーマットで出力する
 * -jdb
  * データベースのパスを指定する
  * default:./easydb
 * -m
  * ファイルあたりの最小トークン数（指定値より小さい場合は解析対象から外す）
  * default:15
 * -w
  * 指定されたワークスペースに対して，正規化したファイルのダンプを行う
  * このオプションを指定する場合はディスクの空き容量に十分注意すること
 * -x
  * NGワードが指定可能（パス上にNGワードが含まれているファイルはすべて除外される）（複数可）
  * 入れておくと良さそうな単語：test, sample, example, tag, branch

* 例: java -jar FCFinder.jar -l JAVA C -dl unix_sample.xml -jdb WORK_TMP
 * unix_sample.xml に記述したディレクトリ群から
 * JAVA, C 言語のファイル(.c, .h, .java)を対象としてファイルクローンを検出
 * データベースは WORK_TMP ディレクトリへ保存


== 結果の見方
+ テーブル説明
* FILE_INFO
 * ファイル情報
* APP_INFO
 * プロジェクト（アプリケーション）情報
* CLONE_INFO
 * 各ファイルのファイルクローンセットID（グループID）を保存
* HASH_INFO
 * MD5ハッシュ情報

+ 項目の説明
* CLONE_INFO.ID：
 * FILE_INFO.ID に対応
* CLONE_INFO.GROUP_ID：
 * そのファイルが属するグループのID
 * 同じGROUP_IDを持っているファイルは互いにファイルクローン


== その他，注意喚起
* 現在字句解析部分にバグが残っている
* パースに失敗したファイルについてはエラーが標準出力にダダ流れになるので注意
* 字句解析結果が一時的に FC_TMP 上へすべて書き出されるので nas 上で実行することを推奨
* 多くのファイルを対象とすると実行にメモリを食う場合があるので -Xms, -Xmx でメモリを多めに取っておくとよい
* 指定ディレクトリ下にアクセスできないファイルがあった場合，その指定ディレクトリはスキップされる


=== データベースアクセス
* http://db.apache.org/derby/ に含まれている ij を利用されたし



