Ant 对象和引用:引用 ID 的范围是什么?

2024-05-20

似乎很奇怪,没有关于它的文档(至少我知道没有文档;并且我很乐意接受纠正)。

当我这样做时:

<fileset id="my.fs" dir="..."/>

ID的范围是什么my.fs?

  • 整个Ant执行周期?
  • 当前目标(以及任何目标depends当前目标)?

最后,如果多个线程(使用parallel任务)尝试定义具有相同 ID 的文件集?


参考文献在整个目录中可见project其中定义了它们。例如,如果<fileset id="my.fs" dir="..."/>放置在任何目标之外,它将对构建文件中的所有目标可见。如果目标中定义了A,然后它将在目标中可见B if B依赖于取决于A:

示例1:

<project name="Project1" default="doIt">

   <fileset id="my.fs" dir="some_dir"/>
   ...

   <target name="doIt">
       <copy todir="some_dir_copy">
           <fileset refid="my.fs" />  <!-- this will work -->
       </copy>
   </target>
</project>

示例2:

<project name="Project1" default="doIt">

   <target name="prepare">
       <fileset id="my.fs" dir="some_dir"/>
   </target>

   <target name="doIt" depends="prepare">
       <copy todir="some_dir_copy">
           <fileset refid="my.fs" />  <!-- this will work -->
       </copy>
   </target>
</project>

但是,如果您正在调用子项目,例如使用ant or antcall任务,子项目默认会not继承父项目中定义的引用(与 Ant 属性不同)。要继承它们,您可以设置inheritrefs调用子项目时属性为true:

示例3:

<project name="Project1" default="doIt">

   <target name="doIt">
       <fileset id="my.fs" dir="some_dir"/>
       <ant antfile="./build.xml" target="run" />
   </target>

   <target name="run">
       <copy todir="some_dir_copy">
           <fileset refid="my.fs" />  <!-- this will fail -->
       </copy>
   </target>
</project>

示例4:

<project name="Project1" default="doIt">

   <target name="doIt">
       <fileset id="my.fs" dir="some_dir"/>
       <ant antfile="./build.xml" target="run" inheritrefs="true" />
   </target>

   <target name="run">
       <copy todir="some_dir_copy">
           <fileset refid="my.fs" />  <!-- this will work -->
       </copy>
   </target>
</project>

如果您在一个内部执行并行任务parallel任务,并且都定义了相同的引用 ID,那么根据执行顺序,最后一个完成的任务将覆盖另一个任务的引用。

<parallel>
    <fileset id="my.fs" dir="some_dir"/>
    <fileset id="my.fs" dir="another_dir"/>
</parallel>

...

<target name="doIt">
    <copy todir="some_dir_copy">
        <fileset refid="my.fs" />  <!-- this may copy either some_dir or another_dir, depending on which parallel task finished last -->
    </copy>
</target>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ant 对象和引用:引用 ID 的范围是什么? 的相关文章

随机推荐