跳转到内容

Apache Ant/依赖关系

来自维基教科书,开放的书籍,为开放的世界

depends 属性可以包含在 target 标签中,以指定此目标需要在执行之前执行另一个目标。可以指定多个目标,并用逗号隔开。

<target name="one" depends="two, three">

在此,目标“one”只有在名为“two”和“three”的目标先被执行后才会被执行。

使用 depends 属性的示例

[编辑 | 编辑源代码]

以下是一个构建文件的示例,该文件按顺序执行三个目标: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

下一章下一章食谱

华夏公益教科书