2016-02-16 84 views
1

我想讓我的Ant項目輸出一些屬性作爲YAML文件。將Ant屬性寫入YAML文件

例如:

<property name="foo" value="aaa"/> 
<property name="bar" value="bbb"/> 
<property name="baz" value="ccc"/> 

寫入output.yml作爲

foo: aaa 
bar: bbb 
baz: ccc 

任何人都可以表明,不需要外部工具/庫的方法?

+0

屬性名稱是否已知並且是靜態的?如果是這樣,也許你可以使用ant過濾來爲每個屬性設置curent值(http://ant.apache.org/manual/Tasks/filter.html) –

回答

0

Ant使用JavaScript構建,您可能會嘗試。請參閱下面的插圖。

這使用<scriptdef>創建一個任務"props2yaml",它將一組屬性寫入文件。我還沒有嘗試概括爲需要轉義序列字符等

<scriptdef name="props2yaml" language="javascript"> 
<attribute name="destfile"/> 
<element name="propertyset" type="propertyset"/> 
<![CDATA[ 
    var destfile = attributes.get("destfile"); 

    //var properties = project.getProperties(); 
    //var prop_names = properties.keySet().toArray().sort(); 

    var properties = elements.get("propertyset").get(0).getProperties(); 
    var prop_names = properties.stringPropertyNames().toArray().sort(); 

    var fw = new java.io.FileWriter(destfile); 
    for (var i in prop_names) { 
     fw.write(prop_names[i] + ': "' + properties.get(prop_names[i]) + '"\n'); 
    } 
    fw.flush(); 
    fw.close(); 
]]></scriptdef> 

<property name="foo" value="aaa"/> 
<property name="bar" value="bbb"/> 
<property name="baz" value="ccc"/> 

<props2yaml destfile="output.yml"> 
    <propertyset> 
    <propertyref name="foo" /> 
    <propertyref name="bar" /> 
    <propertyref name="baz" /> 
    </propertyset> 
</props2yaml> 

對我來說,在這種情況下,輸出是:

bar: "bbb" 
baz: "ccc" 
foo: "aaa" 

你可以通過改變scriptdef您認爲合適的維持秩序。

註釋掉的行顯示如何獲取項目中所有Ant屬性的完整列表。