Подтвердить что ты не робот

В каком порядке оценивается Ant целевая "если" и "зависит"?

То есть, вызовет следующую цель, когда testSetupDone будет оценивать значение false, выполнить цели в цепочке зависимостей?

<target name="-runTestsIfTestSetupDone" if="testSetupDone" depends="-runTests" />
4b9b3361

Ответ 1

Да, зависимости выполняются до того, как условия будут оценены.


Из руководства Ant:

Важно: атрибуты if и if позволяют включать или отключать только те объекты, к которым они прикреплены. Они не контролируют, зависят ли цели, которые условная цель зависит от того, выполняются ли они. Фактически, они даже не оцениваются до тех пор, пока цель не будет выполнена, и все ее предшественники уже запущены.


Вы также могли бы попробовать себя:

<project>
  <target name="-runTests">
    <property name="testSetupDone" value="foo"/>
  </target>
  <target name="runTestsIfTestSetupDone" if="testSetupDone" depends="-runTests">
    <echo>Test</echo>
  </target>
</project>

Я устанавливаю свойство testSetupDone внутри зависимой цели, а вывод:

Buildfile: build.xml

-runTests:

runTestsIfTestSetupDone:
     [echo] Test

BUILD SUCCESSFUL
Total time: 0 seconds

Выполняется таргетинг -runTests, хотя testSetupDone не установлен в данный момент, а runTestsIfTestSetupDone выполняется впоследствии, поэтому depend оценивается до if (используя Ant 1.7.0).

Ответ 2

От документы:

Ant tries to execute the targets in the depends attribute in the order they 
appear (from left to right). Keep in mind that it is possible that a 
target can get executed earlier when an earlier target depends on it:

<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>

Suppose we want to execute target D. From its depends attribute, 
you might think that first target C, then B and then A is executed. 
Wrong! C depends on B, and B depends on A, 
so first A is executed, then B, then C, and finally D.

Call-Graph:  A --> B --> C --> D