2012-01-16 41 views
2

所以整體的問題是這樣的:從定製Ant任務改寫ant屬性

我們有多個屬性文件

<property file="prop1"/> 
<property file="prop2"/> 

PROP1包含一個屬性看起來像:

mg.prop = ${mg2.prop} 

PROP2包含MG2 .prop

mg2.prop = Hello 

如果他們在同一個文件中,我查詢mg.prop,我會回到「你好」。由於他們在不同的文件,這並不工作(我需要PROP2之前裝載PROP1!)

我寫了一個自定義Ant任務執行以下操作:

String resolved = resolveProperty(propertyName); 
getProject().setProperty(propertyName, resolved); 

如果我運行

log("Resolved property value = " + getProject().getProperty(propertyName)); 

之後,我得到了正確的值。

然而,在Ant腳本,如果我做

<echo message="${mg.prop}"/> 

它讓我看到原來的值。

有關如何解決這個問題的想法?

回答

1

這裏是我是如何結束這個解決 - 我草皮定製Ant任務。

我最終將所有屬性文件連接成一個,按照相反的優先順序。

所以,如果我想從3.properties屬性來覆蓋那些2.properties和1.properties,我做了以下內容:

<concat destfile="resolved.properties"> 
    <fileset file="1.properties" /> 
    <fileset file="2.properties" /> 
    <fileset file="3.properties" /> 
</concat> 

<property file="resolved.properties"/> 
3

從螞蟻手冊:

「屬性是不可改變的:誰設置屬性首先凍結其用於構建的休息;他們是最絕對不變量」

http://ant.apache.org/manual/Tasks/property.html

根據您的情況,您可能能夠完成你想要通過加載PROP1 兩次,使用loadproperties和過濾器鏈在第一時間僅需線含「{MG2 .prop}「,第二次只包含包含它的行

http://ant.apache.org/manual/Tasks/loadproperties.html http://ant.apache.org/manual/Types/filterchain.html#linecontains

+0

感謝拉塞爾 - 我沒有在手冊中看到這一點,我只是認爲一個自定義任務可以解決這個錯誤:)顯然。我用一種不同的方法解決了它 - 見下文。 – 2012-01-17 13:17:47

1

您還可以使用ant-contribvar task重置價值。

從DOC:

下一個示例顯示設置屬性,呼應,取消設置,然後 復位:

<property name="x" value="6"/> 
<echo>${x}</echo> <!-- will print 6 --> 
<var name="x" unset="true"/> 
<property name="x" value="12"/> 
<echo>${x}</echo> <!-- will print 12 -->