0

この質問に対する答えを見つけることができませんでした。おわかりのように、リバース エンジニアリングしようとしている 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 に設定され、2 番目の条件タスクで何が起こっても、このプロパティは設定されたままになることを理解していますコード セグメントを離れると true になります。私の質問は、プロパティ tests.complete が最初の条件によって設定されていることを考えると、条件テストの 2 番目のセットが評価されるのですか?

4

1 に答える 1

0

クリーンな (定義されていない) プロパティのみを設定できます。プロパティがすでに設定されている場合は、何も行われません。

したがって、いいえ、2 番目の条件セットは評価されません。次のコードを使用してテストできます。

<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>
于 2013-01-31T13:22:13.247 に答える