我的所有项目及其版本都在如下的属性文件中定义:
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循环中项目名称的硬编码? 基本上迭代每一行,并在我去的时候提取项目的名称和版本。
答案 0 :(得分: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循环可以像以前一样继续。
答案 1 :(得分:0)
您要记住的一点是,如果您正在阅读其他.property文件(除了build.properties之外),那么它就是一个范围。如果您读取了另一个文件(通过property file =“foo.property”)标记,则ant将显示该文件已被读取,并且已加载属性。但是,当你转到引用它们时,它们是未定义的。