参考文献在整个目录中可见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>