Ant
ずーっと前に書いて放置した、Eclipse上でJavaのソースを追いかけながら Antをデバッグする方法。 というかマニュアルをベースに実行してるだけ。 ant.jarとant-launcher.jarをパスに通す。 antのソースをjarファイルに関連付ける。 てきとーにブレークポイ…
copyしているのとmoveしている以外は、一見同じに見えるコード。 <copy file="source.txt" tofile="dist.txt" encoding="${file.encoding}" outputencoding="UTF-8" /><move file="source.txt" tofile="dist.txt" encoding="${file.encoding}" outputencoding="UTF-8" />copyの方はファイルのエンコーディングは変わるけど、 moveの方は変わらない。この場合、moveはファイルをリネームするだけ。 すげーまぎらわしい…</move></copy>
Antにfailタスクというものがある。 名前の通りJUnitのアサーションのfailみたいな動作をするけど、 failとする場合の条件を指定できる。 たとえば、こんな感じ。 ファイルがなかったら失敗 <fail message="ファイルねーよ!!!"> <condition> <not><available file="hoge.txt" /></not> </condition> </fail> Cドライブで動かさなかったら失敗 <fail message="C:\じゃねーのかよ!"> <condition> <not></not></condition></fail>
自作プラグインの出力は、マニフェストエディタのexportのウィザードでできるけど、 Antからでも実行することができる。 でも、実行する際にちょっとハマったのでメモっとく。 Exportのウィザードの画面で、OptionsのSave as Ant scriptにチェックをつけると…
Antのタスクを自作するときは、Taskクラスを継承してexecuteメソッドを実装する。 んで、executeメソッドをEclipseの機能で追加すると、次のようになる。 public void execute() throws BuildException { // TODO Auto-generated method stub super.execute(…
と言っても、それほど難しいもんでもなかった。 <exec executable="cscript.exe"> <arg value="[実行するファイル]" /> </exec>cscript.exe実行時のロゴはけっこーうざいので <arg value="//NoLogo" />を付けるとすっきりする。</arg>
Antのconditionで、ファイルが同一であるかをチェックするFilesMatchというのが あったので試してみる。 FilesMatchは、引数として2つのファイルを受け取り、 それらの内容が同じであるかをチェックしてくれる。 ソースを見る限りだと、次の条件の場合にtrue…
前にやったときでは、Eclipseのpluginフォルダから取り出して それを解凍してうんたらかんたら・・・ってやってたんだけど、 いつのまにやら、コンパイラ単体でも配布されてた。 落とすところは、Eclipseのダウンロードページの"JDT Core Batch Compiler" と…
Eclipseを使うと、ビルドファイルをステップ実行できる。 でも、ビルドファイルからタスク内のコードには飛べない。 なので、タスク実行時のパラメータやカレントスレッドの情報を 調べられなかった。 で、悩んだ結果。 AntをMainから実行すればよかったこと…
知ってはいたけど、再確認。 <property name="prop1" value="ykhr" /> <echo message="${prop1}" /> <property name="prop1" value="kokko" /> <echo message="${prop1}" /> 結果。 [echo] ykhr [echo] ykhrってなわけで。 変数っぽく使いたい場合は、Ant-ContribのVarを使うのかなぁ。</echo></property></echo></property>
ant.batを見ていて気付いたこと。 ant.batを実行すると、まず始めに%HOME%/antrc_pre.batがコールされ、 終了前には%HOME%/antrc_post.batがコールされるように作られている。 (両方とも、該当のバッチファイルがあったときのみ) なので、前処理・後処理用…
Antタスクの属性で、「ある決まった値の中から1つのみを指定させる」というようにしたい場合がある。 例えば、echoタスクのlevel属性の指定(errorやらinfoやら)みたいに。 これを実現するためのクラスとして、EnumeratedAttributeがある。 これを使えば、E…
とりあえず用。echoタスクを使う。 <target name="exec1"> <echo file="log1.txt">Hello</echo> <echo file="log1.txt" append="true">OH!</echo> <echo file="log1.txt" append="true">Good-bye</echo> </target> でも、改行が出力されないので、すべて1行に表示されてしまう。 下のようにやれば複数行で出力されるけど、美しくない。 改行コードが\nになっちゃうし。 <target name="exec2"> </target>
Antで、必要な部分のみをログ出力する。 この場合、recordタスクを使う。 こんな感じ。 <record action="start" name="record.txt" /> <echo message="hoge" /> <delete file="a.txt" /> <record action="stop" name="record.txt" /> record.txtの内容。 [echo] hoge [delete] Deleting: C:\tmp\a.txt recordタスクを使用すると、startとendの間の処理がファイルに出力されるようになる。 内容は標</record></delete></echo></record>…
タスク内からもログ出力みたいなことはできるけど、とりあえず一番楽な方法。 ant実行時に、以下のようにオプションを付ける。 ant -l log.txt lオプションで、ログがファイルに出力されるようになる。 内容は標準出力されるものと同じなので、リダイレクト…
Antのjavaタスクやexecタスクは、arg要素を指定することができる。 このarg要素では、value属性とline属性のどちらでも引数を指定できるけど、 ちょっとした違いがあってややこしい。というか、どっち使えばいいかわからん。 というわけで、さくっと確認して…
Antに、ファイル内の置換を行うreplaceタスクがある。 でもこのタスク、置換したいファイルがかなり大きかったりすると、すぐOutOfMemoryで落ちる。 原因は、全ファイルを一度読み込んでる処理しているから。 ただ、複数行を指定して置換できたりするから、…
前の日記でインストールしたCVSNTを使ってAntからアクセスしようとしてた。 こんな感じで。 でも、なぜか怒られた。 [cvs] cvs checkout: Empty password used - try 'cvs login' with a real password [cvs] cvs [checkout aborted]: authorization failed:…
Antで、ファイルが存在する場合としない場合で分岐したい。 分岐には前に試したAnt-ContribのIfタスクを使えばいいけど、分岐の条件節をどのようにすればよいかが悩ましい。 単一のファイルが存在するかどうかだったら、とりあえずはavailableタスクでできる…
assert文が使われた1.4用のソースをコンパイルするには、 javacのsource属性を指定する。 Genericsなんかを使った1.5のソースの場合は、source属性で"1.5"と指定すればいいけど、 もともとJDK1.5を使ってれば特に問題なっしんぐ。 でも、間違ってsource属性…
Antのオプションタスクに、echopropertiesというタスクがあったので、 使ってみた。その名のとおり、プロパティを表示してくれるらしい。 ビルドファイルはこんな感じ。 実行結果は長いので省略。 prefixを指定すると、その単語から始まるもののみを表示で…
前の日記の通りAntのjavacタスクでEclipseのコンパイラを使うと、 コンパイルが通らないクラスでも、failonerror="false"のときは クラスファイルが生成される。 興味本位で、どんなクラスファイルが生成されるのかを調べてみる。 まずは、ビルドスクリプト…
Antから、コンパイルが通らないクラスを一緒にしてjavacタスクでコンパイルを実行した場合、 すべてのクラスファイルが生成されない。 せめて、コンパイルが通るクラスはクラスファイルが生成されてもいいのに。 普通にDOS窓からjavacで実行しても生成されな…
バッチファイルで、Antを実行する処理を書いて実行すると、 そのAnt実行の次の行以降のバッチファイルの処理が実行されない。 というよりかは、Antの実行が終了するとバッチファイルの処理が残っていても そこで終わってしまう。 まずはこの状況から。 ビル…
ant.batを見てると、結局はjavaコマンドを実行してるだけっぽい。 んで、java.exe実行時に、vmの引数として%ANT_OPTS%と指定してる。 なので、antを実行する前に、 set ANT_OPTS=-Xmx512mとかやれば、いけるみたい。 というか、AntでOutOfMemoryで落ちたの、…
とあるJavaのプログラムが、スタンドアロンでは動くけど、 Antからだと動かない。 色々調べていくと、ContextClassLoaderあたりがあやしい。 でも、ContextClassLoaderって何??(汗 JavaプログラムをAntから実行するときは、Ant実行時のパスに通すのではな…
FileSetには、defaultexcludesというbooleanの属性があり、初期値はtrueである。 そしてdefaultexcludesの意味は、とあるファイルはデフォルトで 除外されるということらしい。 で、とあるファイルとは何かというと・・・ **/*~ **/#*# **/.#* **/%*% **/._*…
ビルドスクリプト内で、targetタグの外に実装したタスクがある場合、 そのファイルのターゲットをantcallタスクでコールすると、 コールした回数分、target外のタスクが実行されるっぽい。 でも、dependsにターゲットを並べておいた場合は、 1回しか実行され…
Antでは、propertyタスクでプロパティファイルを読み込むことが出来る。 そして、この中でプロパティのvalueを定義する際、プロパティを使って定義することができる。 つまり、以下のような定義が可能である。 base=C:/tmp target=${base}/target 試しに、こ…
Antの設計書って何書けばいいんだろ。 処理なんて箇条書きでしか書けないし、 プロパティをすべての記述するのはやりすぎ感があるし。 うーむ。