« ぷっちん | 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


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

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