我想让我的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 :(得分: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属性的完整列表。