根据条件包括ANT修改的选择器



我正在修改退出的蚂蚁脚本以支持差异构建。为此,我已经在文件集中使用了修改后的选择器来查找修改后的文件。但是问题是当我进行完整构建时,我需要根据某些属性或参数绕过修改过滤器。如下所示。无论如何都可以这样做。

<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脚本,则需要在fileset任务中考虑modifiedexclude。如果使用dt2调用,则我需要在fileset任务中仅考虑exclude

我无法使用上述脚本BeaCuse fileset不支持嵌套的if任务。这就是为什么我正在寻找其他方法来做到这一点的原因。请提出一些这样做的方法。

p.s:我不想创建两个目标,其中包括fileset中的modifiedexclude,而另一个目标只有exclude

您可以在目标上使用 ifunless属性,以使其在属性上有条件地执行。您应该将条件零件移至其自己的目标(如果尚未完成),然后将ifunless条件添加到目标。

我从您的示例中并不完全清楚,但这可能意味着将copy在两个目标中,包括仅在其中一个目标中的modified部分。在这种情况下,您可以在同一属性上使每个目标有条件 - 一个为if,将每个目标作为unless

我已经使用以下蚂蚁脚本来达到我的要求。

<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>

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

相关内容

  • 没有找到相关文章

最新更新