在ANT'复制'任务</filterset>中禁用包含嵌套<filterset>元素的过滤

时间:2011-01-21 06:54:25

标签: ant filtering

要求:
我们有一个ANT构建文件,用于DEV和RELEASE模式。我们希望在DEV模式下启用过滤并在RELEASE模式下禁用它。由于我们对两种模式(DEV和RELEASE)使用相同的构建文件,因此我们正在寻找基于构建模式打开/关闭过滤的方法。

到目前为止我的分析:
根据文档,可以禁用过滤,但始终使用嵌套元素,即使此属性为false。 http://ant.apache.org/manual/Tasks/copy.html
请注意,在我们的案例中,我们不能放弃元素。

问题:
我想知道是否有一种解决方法可以禁用过滤,包括“复制”任务中的嵌套元素。

1 个答案:

答案 0 :(得分:3)

你可以通过让一个什么也不做的事来达到没有过滤器的效果。 Filtersets support id/refids,因此您可以定义两个 - 一个dev和一个release - 然后使用基于模式的条件在它们之间切换。像这样:

<property name="mode" value="release" /><!--Or value="dev"-->

<filterset id="dev.filter.id">
    <filter token="MODE" value="dev" />
</filterset>

<filterset id="release.filter.id" /><!--Null filterset-->

<!--Choose filterset id depending on mode-->   
<condition property="copy.filter.id"
           value="dev.filter.id"
           else="release.filter.id">
    <equals arg1="${mode}" arg2="dev"/>
</condition>

<copy file="input.txt" tofile="output.txt">
    <filterset refid="${copy.filter.id}" />
</copy>

如果您在开发和发布模式之间有许多不同的行为,那么将它们放在单独的构建配置文件中并加载当前模式的行为可能是有意义的。