Задача «Условие муравья»

Мне не удалось найти ответ на этот вопрос, и, как вы увидите, это не важно для понимания того, как работает файл build.xml, который я пытаюсь реконструировать. Тем не менее я думаю, что вопрос имеет некоторую обоснованность.

В этом build.xml у меня есть следующий сегмент кода:

<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>

Я понимаю, что если свойство no.tests установлено до того, как этот сегмент кода встретится, тогда свойствуtests.complete будет присвоено значение true в первом условии, и независимо от того, что произойдет во второй задаче условия, это свойство останется установленным в true при выходе из сегмента кода. Мой вопрос: учитывая, что свойство test.complete установлено первым условием, оценивается ли второй набор тестов условий?


person Paul Coombes    schedule 31.01.2013    source источник


Ответы (1)


Можно установить только чистые (не определенные) свойства. Если ваше свойство уже установлено, ничего не делается.

Итак, нет, второй набор условий не оценивается. Вы можете проверить это, используя этот код:

<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>

Вы также можете проверить это, используя противоположное:

<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>
person Gilberto Torrezan    schedule 31.01.2013