2010-06-16 129 views
15

我所有的项目及其版本的属性文件中定义是这样的:如何迭代文件中的属性?

ProjectNameA=0.0.1 
ProjectNameB=1.4.2 

我想在遍历所有的项目,并在Ant脚本中使用他们的名字和版本。

目前我阅读使用属性任务的整个文件,然后遍历一个给定的列表中一个循环是这样的:

<for list="ProjectNameA,ProjectNameB" param="project"> 
    <sequential> 
    <echo message="@{project} has version ${@{project}}" /> 
    </sequential> 
</for> 

我怎样才能避免项目名称的硬编码在for循环? 基本上遍历每一行,并随时提取项目的名称和版本。

回答

12

看到,因为你已经在使用antcontrib for,如何利用该propertyselector任务:

<property file="properties.txt" prefix="projects."/> 
<propertyselector property="projects" match="projects\.(.*)" select="\1"/> 

<property file="properties.txt" /> 
<for list="${projects}" param="project"> 
    ... 
</for> 

这里的想法是与projects前缀一次读取性能,以及使用结果集属性以propertyselector任务构建以逗号分隔的项目列表。然后,属性重新读取而不是的前缀,以便您的for循环可以像以前一样继续。

+0

添加了与给定错误的关系,并对for元素进行了序列化以使其更加明显。 – 2011-10-05 07:38:14

+0

想要添加一个编辑,但它被拒绝了。因此,我将它添加为注释:for任务未在最新的jar中的antcontrib.properties中以某种方式列出。解决方法是将其作为一个名称包含在taskdef中的类,如http://sourceforge.net/tracker/?func=detail&aid=2838574&group_id=36177&atid=416920 – 2011-10-05 08:50:52

+0

中的bug报告中所述,感谢Martin Martin 。对于其他没有安装ant contrib的东西的用户,您可能还需要以下行: 参考:http:// ant-contrib。 sourceforge.net/tasks/index.html#intro – 2012-07-24 23:04:08

0

如果您正在阅读额外的.property文件(除了build.properties),您需要牢记的一点是范围界定。如果你读了一个额外的文件(通过属性file =“foo.property”)标签,ant会显示文件被读取,并且加载属性。但是,当你引用它们时,它们会出现未定义的。