antのFTPタスクが使えない

ゆえあって、いま作ってるビルドスクリプト中でFTPを使ってファイル転送をする場面があって、これをantのFTPタスクで実装しようとしたのだが、これが期待通りに動かない。転送対象ファイルが0だ、と言ってくるのだ。おかしい、**/*なんて指定していて、ゼロってことは無いだろう。

パケットをスニファしてみると、ログイン、目的のディレクトリへの移動、などなど前準備が滞りなく終了したあと、さぁファイルを転送するぞ!という段階になってなぜかQUITしている。なんでだろう、特に例外も出てこないし・・・。

気づくのに時間がかかったが、AntマニュアルのFTPタスクのページに注意書きがあった(汗

Warning: there have been problems reported concerning the ftp get with newer attribute. Problems might be due to format of ls -l differing from what is expected by commons-net, for instance due to specificities of language used by the ftp server in the directory listing. If you encounter such a problem, please send an email including a sample directory listing coming from your ftp server (ls -l on the ftp prompt).

えぇと・・・FTPクライアントからls -l(NLSTだな)を投げると、サーバはそのディレクトリのファイル一覧を送ってくるのだが、この書式がFTPサーバの言語設定次第でcommons-netが予測したものと異なる場合があるらしい。

つまり、Antが使っているcommons-netがファイル一覧をうまく裁ききれないのが原因ってことか。試しにftpコマンド使ってls -lしてみたところ、なるほど、日付部分が「6月21日」と日本語になっている。こいつのせいか!

commons-netのバージョンを1.1.0, 1.2.2, 1.3.0, 1.4.1と変えて試したが、どれもうまくいかず。

仕方がないので、環境依存してしまうが、FTPするところだけshで書いてExecすることにした。あまり使わないタスクなだけに、なかなか気づかなかった発見であった。

・・・代わりにscpつかえたらなぁ。サーバにsshd乗ってねぇでやんの。