我想让我的 Ant 项目输出一些属性作为 YAML 文件。
例如:
<property name="foo" value="aaa"/>
<property name="bar" value="bbb"/>
<property name="baz" value="ccc"/>
写入输出.yml 作为
foo: aaa
bar: bbb
baz: ccc
任何人都可以建议一种不需要外部工具/库的方法吗?
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"
您可以通过根据需要更改脚本定义来保持顺序。
注释掉的行显示了如何获取项目中所有 Ant 属性的完整列表。