2012-06-18 74 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