将Ant属性写入YAML文件

时间:2016-02-16 21:29:03

标签: 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

有人可以建议一种不需要外部工具/库的方法吗?

1 个答案:

答案 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属性的完整列表。