Apache Ant 1.8.1をWindows 7にインストールして、今更ながら題名のとおり悲しいエラーに出会ってしまいました・・・。
Cygwinのコマンドから実行できていたのですが、Windowsのコマンドプロンプトから実行するとantが見つからないというエラーになりました。
インストールで実施したこと
- apache-ant-1.8.1-bin.tar.bz2 をダウンロード
- Cygwin上で、tarコマンドでダウンロードしたファイルをC:\Program Files\Java の下に展開*1
- Cygwin上で、antコマンドの実行に成功
- エクスプローラやコマンドプロンプトでは、なぜか上記のディレクトリにapache-ant-1.8.1が存在しない。id:torutk:20100901で書いた問題なので、エクスプローラでユーザーディレクトリのAppData\Local\VirtualStore\Program Files\Java\apache-ant-1.8.1をC:\Program Files\Javaに移動
- コマンドプロンプトからantを実行すると題名のエラーが発生(環境変数PATH、JAVA_HOMEは設定済み)
ここで、apache-ant-1.8.1\binの下を見ると、次のファイルしかありません。
ant antRun antRun.pl complete-ant-cmd.pl runant.pl runant.py
あれっ、Windows用のバッチファイル(ant.bat)がない!
調査
Cygwinのtarコマンドでapache-ant-1.8.1-bin.tar.bz2の内容一覧を見ると、確かにない*2
-rwxr-xr-x ant/ant 9997 2010-05-01 07:02 apache-ant-1.8.1/bin/ant -rwxr-xr-x ant/ant 861 2010-05-01 07:02 apache-ant-1.8.1/bin/antRun -rwxr-xr-x ant/ant 2199 2010-05-01 07:02 apache-ant-1.8.1/bin/antRun.pl -rwxr-xr-x ant/ant 3219 2010-05-01 07:02 apache-ant-1.8.1/bin/complete-ant-cmd.pl -rwxr-xr-x ant/ant 4422 2010-05-01 07:02 apache-ant-1.8.1/bin/runant.pl -rwxr-xr-x ant/ant 3396 2010-05-01 07:02 apache-ant-1.8.1/bin/runant.py drwxr-xr-x ant/ant 0 2010-05-01 07:03 apache-ant-1.8.1/ drwxr-xr-x ant/ant 0 2010-05-01 07:02 apache-ant-1.8.1/bin/ drwxr-xr-x ant/ant 0 2010-05-01 07:03 apache-ant-1.8.1/docs/
そこで、apache-ant-1.8.1-bin.zipをダウンロードして、Cygwinのzipコマンドで一覧を見ると、
0 04-30-2010 18:03 apache-ant-1.8.1/ 0 04-30-2010 18:02 apache-ant-1.8.1/bin/ 9997 04-30-2010 18:02 apache-ant-1.8.1/bin/ant 861 04-30-2010 18:02 apache-ant-1.8.1/bin/antRun 2199 04-30-2010 18:02 apache-ant-1.8.1/bin/antRun.pl 3219 04-30-2010 18:02 apache-ant-1.8.1/bin/complete-ant-cmd.pl 4422 04-30-2010 18:02 apache-ant-1.8.1/bin/runant.pl 3396 04-30-2010 18:02 apache-ant-1.8.1/bin/runant.py 0 04-30-2010 18:03 apache-ant-1.8.1/docs/
あれっ、やはりない。おかしい。
次に、Cygwin上ではなく、7zipで解凍を試みてみると、解凍先にC:\Program Files\Javaを指定し実行すると、最後に「診断結果」ダイアログが表示され、メッセージに「can not open output file C:\Program Files\Java\apache-ant-1.8.1\bin\ant」のようなメッセージが1633行表示されました。(この診断メッセージにおいて、binディレクトリの下のファイル名は上述と一緒)
ファイルは展開されていないので、何らかの原因でエラーになっているようです。
7zipで、展開先をいったんユーザーのディレクトリにしてみると、正常に展開され、かつbinディレクトリの下には
ant antenv.cmd antRun.pl lcp.bat runrc.cmd ant.bat antRun complete-ant-cmd.pl runant.pl ant.cmd antRun.bat envset.cmd runant.py
と、Windows用バッチコマンドが含まれていました。
この展開したディレクトリをエクスプローラでC:\Program Files\Javaの下へ移動させると、無事antが実行できるようになりました。
ここで、もしかしてと、Cygwin上でカレントディレクトリをユーザーディレクトリ(ホーム)に移動し、そこで先ほどと同じアーカイブファイルの中身を見てみると、tar.bz2の方もzipの方もどちらもWindows用バッチコマンドが含まれています。
カレントディレクトリがC:\Program Filesかその下のディレクトリにあるとき、tarやzipで展開しようとすると、"VirtualStore"の仕組みだけでなく、cmd、batなどのWindows実行形式のファイルがなかったことにされてしまうという現象のようです。
さらに、実際にファイルをProgram Files下にコピーするのではなく、tarのtオプションやzipのlオプションでアーカイブ内の一覧を見るだけなのに、スキップされてしまうので、ちょっと厄介な問題です。
関連しそうな情報
この記事中の「ケース3:Program Filesフォルダ以下のアクセス権問題」
同じような問題の質問が挙がっています。ただ、現時点で的確な回答はついていません。