ファイルの内容を比較して同期をとるantのタスクを作ってみた。ファイル内の各行に正規表現を適用して、異なるデータでも同じパターンとして判断することが出来る。
ant1.6用だけど、eclipse3のantも1.6だから問題ないでしょう。
使用目的その1は、javadocのコピー。
javadocを生成すると全ファイルが作り直されるが、日付のみ変更されたファイルが多くて、実際に表示される内容が変わっているファイルは少なかったりする。今までは生成されたファイルを全て公開用ディレクトリにコピーしていたけど、そこから全ファイルをftp転送するのは時間がかかるんだよね(嘆)
このタスクを使って内容が変更されたファイルだけをコピーできるようになったので、効果抜群♪
使用目的その2は、CVSの作業ディレクトリ間のコピー。
ブランチのファイルをトランクに反映させるような場合、「CVS」という名前のディレクトリ内はそのままにして、その他のファイルだけをコピーしたい。
さらに、ブランチとトランクではCVSキーワードの出力内容が異なっているので、それは無視して、内容が実質的に変わっているファイルだけを対象にしたい。
これも出来るようになった♪
ant1.6には、syncという ディレクトリの同期をとる為のタスクが追加されている。でも比較せずに残したいファイルが指定できなかったりして、やりたい事が微妙に出来なかった。
そんな訳でsyncを参考に独自のタスクを作ったんだけど、これがまた例によって拡張性が無くて(嘆)
基本的には内部クラスを継承してメソッドを1つオーバーライドするだけだったんだけど、そのインスタンスがprivateメンバーだった為に全てのメソッドが使用不能…。
「antは拡張性を考えてある」と謳っているようで、確かにcopyタスクなんかはプログラムの中で作り出して呼んだりすることは出来るけど、クラス自体を継承することまで考えてあるのは少ないような…。
それにしても正規表現って、書いて見ると分かりづらい(苦笑)
CVSキーワードを示す正規表現なんて、すごいことになってる(爆)
※コメント投稿者のブログIDはブログ作成者のみに通知されます