Ant filterset任务不会递归

时间:2011-02-03 13:14:48

标签: ant

使用Apache Ant 1.7.1

当recurse设置为true时,Ant Filter任务看起来无法在一行中多次解析同一属性。我在Ant文档中找不到任何提及。这应该发生吗?

使用此ant构建文件:

<project basedir="." default="assemble" >
  <macrodef name="copy-and-filter">
    <sequential>
      <copy tofile="to.txt" file="from.txt" overwrite="true">
        <filterset recurse="true">
          <filtersfile file="filters.properties"/>
        </filterset>
      </copy>
    </sequential>
  </macrodef>

  <target name="assemble">
    <copy-and-filter />
  </target>
</project>

使用这些文件:

from.txt:

I want my broker to be: @broker.url@
and my client to be: @client.url@

filters.properties:

myval=fish
broker.url=-@myval@-
client.url=@myval@-@myval@

我得到输出:

i want my broker to be: -fish-
and my client to be: myval

而不是我的预期:

i want my broker to be: -fish-
and my client to be: fish-fish

如果我将recurse设置为false,那么我会得到'正确'的行为。

i want my broker to be: -@myval@-
and my client to be: @myval@-@myval@

为什么会这样?

1 个答案:

答案 0 :(得分:0)

recurse标志用于在初始替换发生后查找更多标记,但如果再次使用相同的标记,它将无法工作。问题是设置recurse = true会导致无限循环。请参阅Ant的输出:

Infinite loop in tokens. Currently known token tokens: [client.url, myval]
Problem token: @myval@ called from @myval@

我认为不可能使用filterset任务做你想做的事情。你在使用to.txt文件是为了什么?是提供系统配置文件吗?