2010-07-08 4 views
3

Я знаю, что есть ant-contrib, в котором содержится логика «if-else» для муравья. Но мне нужно достичь того же безant-contrib. Это возможно?Как эмулировать логику «if-else» с помощью «условия»?

псевдокод, который мне нужно работать:

if(property-"myProp"-is-true){ 
    do-this; 
}else{ 
    do-that; 
} 

Спасибо!

ответ

4

Я настоятельно рекомендую использовать АНТ-вклад в любом случае, но если вы проверяете свойство, которое всегда имеет значение, я бы заглядывать в использовании муравей параметра макроса как часть имя нового свойства, которое затем тест для

<macrodef name="create-myprop-value"> 
<attribute name="prop"/> 
<sequential> 
     <!-- should create a property called optional.myprop.true or --> 
     <!-- optional.myprop.false --> 
     <property name="[email protected]{prop}" value="set" /> 
</sequential> 
</macrodef> 

<target name="load-props"> 
    <create-myprop-value prop="${optional.myprop}" /> 
</target> 

<target name="when-myprop-true" if="optional.myprop.true" depends="load-props"> 
... 
</target> 

<target name="when-myprop-false" if="optional.myprop.false" depends="load-props"> 
... 
</target> 

<target name="do-if-else" depends="when-myprop-true,when-myprop-false"> 
... 
</target> 
+0

Строго говоря, «еще» цель может быть закодирован как если = «optional.myprop.true», а не если = «optional.myprop.false». Макрос также может быть обобщен для передачи имени свойства в качестве параметра. –

3

Вы можете поместить атрибут «если» в свои цели.

<target name="do-this-when-myProp-is-true" if="myProp"> 
... 
</target> 

Это будет срабатывать только в том случае, если установлен «myProp». Вам нужно будет определить myProp в другом месте, чтобы он был настроен, если вы хотите, чтобы эта цель срабатывала &, если вы этого не сделаете. Вы не можете использовать, если для альтернативного случая:

<target name="do-this-when-myProp-is-false" unless="myProp"> 
... 
</target>