Search code examples
antant-contrib

How can I iterate over properties from a file?


All my projects and their versions are defined in a properties file like this:

ProjectNameA=0.0.1
ProjectNameB=1.4.2

I'd like to iterate over all the projects, and use their names and versions in an Ant script.

At present I read the entire file using the property task, then iterate over a given list in a for loop like this:

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

How can I avoid the hard-coding of the project names in the for loop? Basically iterate over each line and extract the name and the version of a project as I go.


Solution

  • Seeing as you're already using antcontrib for, how about making use of the propertyselector task:

    <property file="properties.txt" prefix="projects."/>
    <propertyselector property="projects" match="projects\.(.*)" select="\1"/>
    
    <property file="properties.txt" />
    <for list="${projects}" param="project">
        ...
    </for>
    

    The idea here is to read the properties once with the projects prefix, and use the resulting set of properties to build a comma-separated list of projects with the propertyselector task. Then the properties are re-read without the prefix, so that your for loop can proceed as before.