Hello ant users.
I am facing an issue with handling properties with calls to tasks/macros
nested within the parallel task. More of a logical/approach related issue
rather than anything with the tool itself. Here go the details:
Using ant:
Apache Ant version 1.8.1 compiled on April 30 2010
With Java:
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)

The most relevant part of the build.xml:
        <parallel>
            <mySleep seconds="4"/>
            <mySleep seconds="3"/>
            <mySleep seconds="2"/>
            <mySleep seconds="1"/>
        </parallel>

mySleep is my own macro with the following declaration:
    <macrodef name="mySleep">
        <attribute name="seconds"/>
        <sequential>
            <sleep seconds="@{seconds}"/> <!-- In my actual case, this is
exec calls with the outputproperty attribute -->
            <property name="myProp" value="my value = @{seconds}"/>
            <echo>Now working with ${myProp}</echo>
        </sequential>
    </macrodef>

Since properties are immutable, if it so happens that the 4th macro call
sets the property, the rest of them cannot modify it. A quick alternative to
this might be using the variable task (in place of property) from
ant-contrib.sf.net. However, the above is just an example. In reality, my
macro does an exec call. The outputproperty attribute to the exec call will
be what I need to process later.

So I guess my questions are:
1) What is the best approach to handle properties/variables for (almost)
identical macro calls ? I cannot modify the property name each time. I could
redirect stdout/stderr of the exec task to some file. But not sure how to
guarantee that the file will be unique and not get overwritten if 2 tasks
finish at the same instant of time.
2) Can the outputproperty value be captured in a variable directly ? I read
that it is possible to use the ant-contrib propertycopy task to get one
property value into another. But then there is a risk that the copy might
not be synchronized ...

The last option I have is of course to get rid of the parallel task and let
the macros run one after the other. But that would be modifying the
requirement to suit the scripting limitation I've run into. So I thought of
asking here before jumping on any implementation.

Thanks in advance for any pointers,
Parag Doke
Save paper, save trees. Do not print emails/documents unless absolutely
necessary.

Reply via email to