Apache Ant/依赖关系
外观
depends 属性可以包含在 target 标签中,以指定此目标需要在执行之前执行另一个目标。可以指定多个目标,并用逗号隔开。
<target name="one" depends="two, three">
在此,目标“one”只有在名为“two”和“three”的目标先被执行后才会被执行。
以下是一个构建文件的示例,该文件按顺序执行三个目标:first、middle 和 last。请注意,目标在构建文件中的顺序并不重要。
<?xml version="1.0" encoding="UTF-8"?>
<project default="three">
<target name="one">
<echo>Running One</echo>
</target>
<target name="two" depends="one">
<echo>Running Two</echo>
</target>
<target name="three" depends="two">
<echo>Running Three</echo>
</target>
</project>
示例输出
Buildfile: build.xml
one:
[echo] Running One
two:
[echo] Running Two
three:
[echo] Running Three
BUILD SUCCESSFUL
Total time: 0 seconds
Ant 会跟踪已经运行的目标,并跳过自上次在文件中运行以来未发生更改的目标,例如
<?xml version="1.0" encoding="UTF-8"?>
<project default="three">
<target name="one">
<echo>Running One</echo>
</target>
<target name="two" depends="one">
<echo>Running Two</echo>
</target>
<target name="three" depends="one, two">
<echo>Running Three</echo>
</target>
</project>
将产生与上面相同的输出 - 目标“one”不会被执行两次,即使“two”和“three”目标都已运行,并且每个目标都指定对 one 的依赖关系。
类似地,Ant 会防止循环依赖 - 一个目标依赖于另一个目标,而另一个目标直接或间接地依赖于第一个目标。因此,构建文件
<?xml version="1.0" encoding="UTF-8"?>
<project default="one">
<target name="one" depends="two">
<echo>Running One</echo>
</target>
<target name="two" depends="one">
<echo>Running Two</echo>
</target>
</project>
将产生错误
Buildfile: build.xml BUILD FAILED Circular dependency: one <- two <- one Total time: 1 second