2012-06-18 76 views
3

我想使用一个filterset写出一个文件来替代一个被设置为ant属性的变量。如果我有一个嵌套的filterset,但是不是refid,我可以传递该属性;我正在重复使用filterset,所以我想使用refid。ant filterset属性范围

foo.old只包含[email protected]@

这工作:

 
<target name="filterset-test1"> 
    <property name="bar" value="here is foo" /> 
    <copy file="foo.old" tofile="foo.new1"> 
    <filterset begintoken="@" endtoken="@"> 
     <filter token="foo" value="${bar}" /> 
    </filterset> 
    </copy> 
</target> 

这不能代替令牌:

 
<filterset id="test-filters" begintoken="@" endtoken="@"> 
    <filter token="foo" value="${bar}" /> 
</filterset> 
<target name="filterset-test3"> 
    <property name="bar" value="property doesn't pass thru" /> 
    <copy file="foo.old" tofile="foo.new3"> 
    <filterset refid="test-filters" /> 
    </copy> 
</target> 

有没有办法做到后者?我也尝试编写一个属性文件并将其用作filtersfile属性。

回答

3

问题似乎是顶级filterset内:

<filterset id="test-filters" begintoken="@" endtoken="@"> 
    <filter token="foo" value="${bar}" /> 
</filterset> 

酒店bar是不确定的。移动属性定义为bar外目标filterset-test3应该工作:

<?xml version="1.0" encoding="UTF-8" ?> 
<project name="filter-test"> 

    <property name="bar" value="property doesn't pass thru" /> 

    <filterset id="test-filters" begintoken="@" endtoken="@"> 
    <filter token="foo" value="${bar}" /> 
    </filterset> 

    <target name="filterset-test3"> 
    <copy file="foo.old" tofile="foo.new3"> 
     <filterset refid="test-filters" /> 
    </copy> 
    </target> 
</project> 
+0

谢谢,cpeisert。然而,我需要做的是设置filterset-test3中的信息,甚至filteret-test3依赖的不同目标。这是可能的,还是我需要重新检查我的操作顺序? – climmunk

+0

为了使您的过滤器逻辑更加模块化,一种方法是将任务包装在macrodef中。然后,您可以将任务嵌入之内,就像您的第一个示例,而不使用'refid'。 –

+0

我接受了你的建议,并重新评估了这些属性。谢谢! – climmunk