17

我所有的项目及其版本都在这样的属性文件中定义:

ProjectNameA=0.0.1
ProjectNameB=1.4.2

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

目前我使用属性任务读取整个文件,然后在 for 循环中迭代给定列表,如下所示:

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

如何避免在 for 循环中对项目名称进行硬编码?基本上遍历每一行并提取项目的名称和版本。

4

2 回答 2

13

既然您已经在使用 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 循环可以像以前一样继续。

于 2010-10-03T22:29:13.497 回答
0

如果您正在阅读其他 .property 文件(除了 build.properties),您要记住的事情是范围界定。如果您读取了一个附加文件(通过属性 file="foo.property")标签,ant 将显示该文件已被读取,并且属性已加载。但是,当您去引用它们时,它们会出现未定义的情况。

于 2011-08-10T20:45:34.623 回答