使用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@
为什么会这样?
答案 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文件是为了什么?是提供系统配置文件吗?