« ぷっちん | Main | 今日のひとこと(2/14) »

Antの依存関係の疑問

Javaがキライでしょうがないと言ってたら、じゃあ、せめてAntでやらなきゃいけない仕事があるから、これをやれと言われました。しょうがないので、Ant学んでます。いまいちかわいくないです。

さて、以下の様な処理がしたいのです。

  1. CVSからCheck Out
  2. javac
  3. jar
  4. アプリサーバにデプロイ

当然、四つタスクを書けばいいわけですね。試しにガワだけ書いてみましょう。

<?xml version="1.0" encoding="Shift_JIS" ?>
<project name="hoge" default="deploy">

    <target name="cvs_co">
        <echo>check out</echo>
    </target>

  <target name="javac" depends="cvs_co"  >
    <echo>compile</echo>
  </target>

  <target name="jar" depends="javac" >
    <echo>jar</echo>
  </target>

  <target name="deploy" depends="jar" >
    <echo>deploy</echo>
  </target>

</project>

やってみると、上から順番にタスクが流れます。うむうむ、よしよし。

当然、依存関係のチェックもしてくれます。すでにコンパイル済みだったら、javacターゲットは実行されません。試しに止めてみましょう

先頭近くに

<property name="class_exist" value="true" />

を入れた上で、javacターゲットを

<target name="javac" depends="cvs_co" unless="class_exist" >

とすれば、このターゲットは実行されなくなります。さて、試しましょう

Buildfile: H:\eclipse\ant_test\hoge.xml
cvs_co:
     [echo] check out
javac:
jar:
     [echo] jar
deploy:
     [echo] deploy
BUILD SUCCESSFUL
Total time: 141 milliseconds

ほら、javacは実行されません・・・

アカンがな

当然、ここで実行が止まって欲しいわけですが、依存タスクのcvs_coが実行されてしまってます。これじゃ、毎回全部CVSから取り直しです。


makeの時はどうなるんだけっけな。 こんなmakefileを書いてみます。

hoge.java:
    echo "cvs co"

hoge.class: hoge.java
    echo "javac"

hoge.jar: hoge.class
    echo "jar"

hoge: hoge.jar
    echo "deploy"

ここで、

touch hoge.class
make hoge

すると、

/t/mktest$ make hoge
echo "cvs co"
cvs co
echo "javac"
javac
echo "jar"
jar
echo "deploy"
deploy

全部流れちゃう。そうか・・・makeの場合はなけりゃターゲットを作るんだから、当然、hoge.javaのタスクも動くし、それが動いた以上、それに依存してるものは全部動くわけですな。ここで、

touch hoge.jar

すると・・・

/t/mktest$ touch hoge.jar
/t/mktest$ make hoge
echo "cvs co"
cvs co
echo "javac"
javac
echo "deploy"
deploy

jarは作らなくなるけど、無いファイルは作りにいくからhoge.javaタスクとhoge.classタスクは実行されるんですね。アレ?そうだとすると、hoge.jarもやらないと不味くないか?

ま、結論としては、makeでこういう場合には制御用のフラグファイルを作るわけで、同じことするにはbuild.xmlの止めたいところに、if/unlessを仕込みまくるしかないのかなあ。

うーん、ターゲット・タスクとファイルが紐付かないのは、イマイチわかりづらい。Antってのは、結局、ターゲットはすべて実行されて、タスクが依存関係を理解するだけだと思ってればいいのかな?

ふーむ・・・なかなか悩ましいです。


|
|

« ぷっちん | Main | 今日のひとこと(2/14) »

パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/47905/13895304

Listed below are links to weblogs that reference Antの依存関係の疑問:

« ぷっちん | Main | 今日のひとこと(2/14) »