2013-01-31 6 views
0

Je n'ai pas réussi à trouver la réponse à cette question et, comme vous le verrez, il n'est pas important de comprendre comment le build.xml que j'essaye de faire marche arrière fonctionne. Néanmoins, je pense que la question a une certaine validité.Ant Condition Tâche

Dans ce build.xml je le segment de code suivant:

<condition property="tests.complete"> 
    <isset property="no.tests" /> 
</condition> 
<condition property="tests.complete"> 
    <and> 
     <uptodate> 
      ... 
     </uptodate> 
     <uptodate> 
      ... 
     </uptodate> 
     <uptodate> 
      ... 
     </uptodate> 
     <not> 
      <available ... /> 
     </not> 
     <not> 
      <isset ... /> 
     </not> 
    </and> 
</condition> 

Je comprends que si la propriété no.tests est définie avant ce segment de code est rencontré alors le tests.complete de propriété sera a la valeur true dans la première condition et peu importe ce qui se passe dans la deuxième condition, cette propriété reste définie sur true à la sortie du segment de code. Ma question est, étant donné que la propriété tests.complete est définie par la première condition, est-ce que le second ensemble de tests de conditions est évalué?

Répondre

0

Seules les propriétés propres (non définies) peuvent être définies. Si votre propriété est déjà définie, rien n'est fait. Donc, non, le second ensemble de conditions n'est pas évalué. Vous pouvez le tester en utilisant ce code:

<target name="run"> 
    <property name="no.tests" value="true"/> 
    <condition property="tests.complete"> 
     <isset property="no.tests" /> 
    </condition> 
    <echo message="${tests.complete}"/> <!-- prints true --> 

    <condition property="tests.complete" else="false"> 
     <isset property="whatever" /> <!-- property whatever is not set --> 
    </condition> 
    <echo message="${tests.complete}"/> <!-- prints true as well! --> 
</target> 

Vous pouvez le tester en utilisant aussi le contraire:

<target name="run"> 
    <property name="whatever" value="true"/> 
    <condition property="tests.complete" else="false"> 
     <isset property="no.tests" /> <!-- no.tests isn't defined --> 
    </condition> 
    <echo message="${tests.complete}"/> <!-- prints false --> 

    <condition property="tests.complete" else="false"> 
     <isset property="whatever" /> <!-- the property whatever is defined --> 
    </condition> 
    <echo message="${tests.complete}"/> <!-- prints false as well! --> 
</target>