2012-02-21 12 views
1

私のプログラムでantcallを避けようとしているので、antcallターゲットをターゲットの依存関係に移動しようとしています。今私は状況があります:ターゲットの依存関係が実行される前にAntターゲットの状態をチェックする方法がありますか?

<target name="test" depends="a,b,c" /> 

<target name="a" depends="a1,a2,a3" /> 
<target name="b" depends="b1,b2,b3" /> 
<target name="c" depends="c1,c2,c3" /> 

これまですべてのものがうまく動作します。しかし、私はちょうどターゲット「C」と実行からその依存関係、今ターゲット「C」の依存関係が実行され、それが条件「skip.c」をチェック

<target name="c" depends="c1,c2,c3" if="skip.c" /> (considering the property "skip.c" is already set) 

をスキップしたい場合。
ターゲットとその依存関係の両方が条件に基づいて実行されない優れたソリューションがありますか?

私は条件付きで常にantcallに行くことができます。しかし、別の代替手段を探している。
c1、c2、c3のターゲットで「skip.c」条件をチェックすることはできません。なぜなら、これらのターゲットをチェックする条件が増えているからです。

答えて

2

ターゲットのすべての依存関係は、 "if/unless"テストが見られる前に処理されます。これを避けるためにAntには組み込みメソッドはありません。

代わりに、良いアプローチは、依存関係をアクションから分離することです。次のことを試してみてください。

<target name="test" depends="a,b,c" /> 

<target name="a" depends="a1,a2,a3" /> 
<target name="b" depends="b1,b2,b3" /> 
<target name="c"> 
    <condition property="skip.c.and.dependents"> 
     <or> 
      <isset property="prop1"/> 
      <isset property="prop2"/> 
     </or> 
    </condition> 

    <antcall target="do-c-conditionally"/> 
</target> 

<target name="do-c-conditionally" unless="skip.c.and.dependents"> 
    <antcall target="do-c"/> 
</target> 

<target name="do-c" depends="c1,c2,c3"> 
    <!-- former contents of target c --> 
</target> 
+0

をはい、私は考えますこのオプション。 antcallを避けるために試みた。だから私は今、antcallを使う以外に良い選択肢はないと思う。ソリューションを提供していただきありがとうございます。 – raviinter

0

antcallを使用しないようにするには、サブタスクのそれぞれに条件を配置する必要があります。あなたはタスク「c」を実行し、現時点では条件の処理を行う必要がある場合

<target name="test" depends="a,b,c" /> 

<target name="a" depends="a1,a2,a3" /> 
<target name="b" depends="b1,b2,b3" /> 
<target name="c" depends="c1,c2,c3" /> 

<target name="c1" unless="skip.c"> 
     <!-- contents of target c1 --> 
</target> 
<target name="c2" unless="skip.c"> 
     <!-- contents of target c2 --> 
</target> 
<target name="c3" unless="skip.c"> 
     <!-- contents of target c3 --> 
</target> 

、: は名前「skip.c」を見ると、それはおそらく、このような、条件「がない限り」ですあなたは、このようなターゲット「check_run_c」でそれを行うことができます:

<target name="test" depends="a,b,c" /> 

<target name="a" depends="a1,a2,a3" /> 
<target name="b" depends="b1,b2,b3" /> 
<target name="c" depends="check_run_c,c1,c2,c3" /> 
<target name="check_run_c"> 
    <condition property="run.c"> 
     <!-- set this property "run.c" if the "c*" targets should run... --> 
     <or> 
      <isset property="prop1"/> 
      <isset property="prop2"/> 
     </or> 
    </condition> 
</target> 
<target name="c1" if="run.c"> 
     <!-- contents of target c1 --> 
</target> 
<target name="c2" if="run.c"> 
     <!-- contents of target c2 --> 
</target> 
<target name="c3" if="run.c"> 
     <!-- contents of target c3 --> 
</target> 

また、あなたが唯一の条件付きで実行したいタスク「C」の指示がある場合:

<target name="test" depends="a,b,c" /> 

<target name="a" depends="a1,a2,a3" /> 
<target name="b" depends="b1,b2,b3" /> 
<target name="c" depends="check_run_c,c1,c2,c3" if="run.c" > 
     <!-- contents of target c --> 
</target> 
<target name="check_run_c"> 
    <condition property="run.c"> 
     <!-- set this property "run.c" if the "c*" targets should run... --> 
     <or> 
      <isset property="prop1"/> 
      <isset property="prop2"/> 
     </or> 
    </condition> 
</target> 
<target name="c1" if="run.c"> 
     <!-- contents of target c1 --> 
</target> 
<target name="c2" if="run.c"> 
     <!-- contents of target c2 --> 
</target> 
<target name="c3" if="run.c"> 
     <!-- contents of target c3 --> 
</target> 
関連する問題