gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:28:41 24 4
gpt4 key购买 nike

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

当我这样做时:

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

ID my.fs的范围是什么?
  • 整个Ant执行周期?
  • 当前目标(以及当前目标上depends的任何目标)?

  • 最后,如果多个线程(使用 parallel任务生成)试图定义具有相同ID的文件集会发生什么?

    最佳答案

    引用在定义它们的项目中可见。例如,如果<fileset id="my.fs" dir="..."/>放在任何目标之外,则对于构建文件中的所有目标都是可见的。如果是在目标A中定义的,那么如果B取决于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>

    但是,如果您正在调用子项目,例如使用 antantcall任务,默认情况下,子项目将不会继承父项目中定义的引用(与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>

    关于ant - Ant对象和引用:引用ID的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24448993/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com