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