我正在修改退出的蚂蚁脚本以支持差异构建。为此,我已经在文件集中使用了修改后的选择器来查找修改后的文件。但是问题是当我进行完整构建时,我需要根据某些属性或参数绕过修改过滤器。如下所示。无论如何都可以这样做。
<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
任务中考虑modified
和exclude
。如果使用dt2
调用,则我需要在fileset
任务中仅考虑exclude
。
我无法使用上述脚本BeaCuse fileset
不支持嵌套的if
任务。这就是为什么我正在寻找其他方法来做到这一点的原因。请提出一些这样做的方法。
p.s:我不想创建两个目标,其中包括fileset
中的modified
和exclude
,而另一个目标只有exclude
。
您可以在目标上使用 if
和 unless
属性,以使其在属性上有条件地执行。您应该将条件零件移至其自己的目标(如果尚未完成),然后将if
或unless
条件添加到目标。
我从您的示例中并不完全清楚,但这可能意味着将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>
我创建了可重复使用的模式集,开发人员将在该模式集中更新其排除,我正在重复使用该模式集,用于正常和增量构建。