[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11183] antcall



こんばんは、西野です。

先日の読書会で、antcallって、いったい何がいいのだろう?
dependsとどう違うの?という話がありましたが、
jajakartaでは未訳でした(^^;;

原文は以下のとおりとなっています。

http://ant.apache.org/faq.html
>  I have a target I want to skip if a property is set, so I have unless="property" as an attribute of the target, 
but all the targets this target depends on are still executed. Why?
> 
> The list of dependencies is generated by Ant before any of the targets are run. This allows dependent targets, 
such as an init target, to set properties that can control the execution of the targets higher in the dependency graph. 
This is a good thing.
> 
> However, when your dependencies break down the higher-level task into several smaller steps, this behaviour becomes 
counter-intuitive. There are a couple of solutions available:
> 
>    1. Put the same condition on each of the dependent targets.
>    2. Execute the steps using <antcall>, instead of specifying them inside the depends attribute.

質問:プロパティがセットされている場合に実行したくないターゲットがあるので、ターゲットの属性に"unless"プロパティを
追加したんですけど、それでもこのターゲットに依存するすべてのターゲットが実行されます。どうしてですか?

回答:依存関係のリストは、ターゲットが実行される前に、Antによって作成されます。この仕組みにより、initターゲットの
ような依存したターゲットが設定したプロパティに従って、依存性グラフの中の上位のターゲットを実行するかどうかを制御
できます。これは良いことです。

しかし、高レベルのタスクがいくつかの小さなステップに分割されているときには、これは直感に反します。
このような場合には次のような解決策があります。

  1.依存先のそれぞれのターゲットに同じ条件を付ける。[訳注:修正が必要なときにやっかいなので、やりたくないですよね?]
  2.depends属性の中で条件を指定する代わりに、<antcall>を使って実行する。

http://ant2dot.sourceforge.net/
-- 
西野 亨 <tooru.nishino@xxxxxxxxxxx>