Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 包含基于条件的ant修改选择器_If Statement_Ant_Ant Contrib_Fileset - Fatal编程技术网

If statement 包含基于条件的ant修改选择器

If statement 包含基于条件的ant修改选择器,if-statement,ant,ant-contrib,fileset,If Statement,Ant,Ant Contrib,Fileset,我正在修改现有的ant脚本以支持差异构建。为此,我在文件集中使用了modified selector,只查找修改过的文件。但问题是,当我进行完整构建时,我需要绕过基于某些属性或参数的修改过的过滤器。如下图所示。有没有办法做到这一点 <project name="test" default="dt" basedir="."> <target name="dt1"> <copy todir="ant_temp2">

我正在修改现有的ant脚本以支持差异构建。为此,我在文件集中使用了modified selector,只查找修改过的文件。但问题是,当我进行完整构建时,我需要绕过基于某些属性或参数的修改过的过滤器。如下图所示。有没有办法做到这一点

<project name="test" default="dt" basedir=".">
    <target name="dt1">
        <copy todir="ant_temp2">
            <fileset dir="ant_temp1">
                <if>
                    <equals arg1="${ABC}" arg2="true" />
                    <then>
                        <modified update="true" />
                    </then>
                </if>
                <exclude name="*.txt"/>
            </fileset>
        </copy>
    </target>

    <target name="dt">
        <antcall target="dt1">
            <param name="ABC" value="true" />
        </antcall>
    </target>

    <target name="dt2">
        <antcall target="dt1" />    
    </target>
</project>

< >如果我使用<代码> dt<代码>目标调用上述的Ant脚本,那么我需要考虑<代码>修改< /COD>和<<代码>排除< /代码> <代码>文件集任务。如果使用<代码> dt2调用,那么我需要在<代码>文件集任务中考虑<代码>排除< /代码>。 我无法使用上述脚本,因为
文件集
不支持嵌套的
if
任务。这就是为什么我在寻找另一种方法来做到这一点。请提出一些方法


注:我不想创建两个具有相同复制任务的目标,一个是在
文件集中包含
修改的
排除
,另一个是仅包含
排除
的目标

您可以使用
if
属性,除非
属性处于启用状态,使其执行以属性为条件。您应该将条件部分移动到其自己的目标(如果尚未完成),然后向目标添加
if
,除非
条件


我不完全清楚您的示例,但这可能意味着将
副本
放在两个目标中,包括
修改的
部分,仅放在其中一个目标中。在这种情况下,您可以使每个目标都以相同的属性为条件—一个作为
if
,另一个作为
,除非我使用了下面的ant脚本来实现我的要求

<project name="test" default="dt" basedir=".">
    <patternset  id="fs1">
        <exclude name="*.txt"/>
    </patternset >

    <target name="dt1">
        <copy todir="ant_temp2">
            <fileset dir="ant_temp1">
                <patternset refid="fs1" />
            </fileset>
        </copy>
    </target>

    <target name="dt3">
        <copy todir="ant_temp2">
            <fileset dir="ant_temp1">
                <modified update="true" />
                <patternset refid="fs1" />
            </fileset>
        </copy>
    </target>
</project>


我已经创建了可重用的模式集,开发人员将更新该模式集中的排除项,我正在将该模式集用于正常和增量构建。

您好,sudocode,谢谢您的帮助,但我不想用复制任务创建两个目标,一个包含
modified
exclude
,另一个只包含
exclude
,因为这是现有脚本,开发人员将定期添加更多
exclude
s。如果我制定了两个目标,那么他们必须在两个地方添加
exclude