define ant property from environment with default value

JavaAntEnvironment VariablesReleasePackaging

Java Problem Overview


I would like my build script to act properly for release and development environments.

For this I would like to define a property in ant, call it (e.g.) fileTargetName

fileTargetName will get it's value from the environment variable RELEASE_VER if it's available, if it is not available it will get the default value of dev

Help with ant <condition><value></condition> & <property> to get it working is appreciated.

Java Solutions


Solution 1 - Java

An example from the Ant documentation of how to get an environment variable into a property:

<property environment="env"/>
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/>
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>

In your case, you would use ${env.RELEASE_VER}.

Then for the conditional part, the documentation here says that there are three possible attributes:

Attribute  Description                                             Required
property   The name of the property to set.                        Yes
value      The value to set the property to. Defaults to "true".   No
else       The value to set the property to if the condition       No
evaluates to false. By default the property will
remain unset. Since Ant 1.6.3

Putting it together:

<property environment="env"/>
<condition property="fileTargetName" value="${env.RELEASE_VER}" else="dev">
    <isset property="env.RELEASE_VER" />
</condition>

Solution 2 - Java

You don't need to use a <condition> for this. Properties in Ant are immutable, so you can just use this:

<property environment="env"/>
<property name="env.RELEASE_VER" value="dev"/>

If the RELEASE_VER environment variable is set, then the property will get its value from the environment and the second <property> statement will have no effect. Otherwise, the property will be unset after the first statement, and the second statement will set its value to "dev".

Solution 3 - Java

I'm sure there are easier ways than this, but how about:

<project name="example" default="show-props">

    <property environment="env" />

    <condition property="fileTargetName" value="${env.RELEASE_VER}">
        <isset property="env.RELEASE_VER" />
    </condition>

    <condition property="fileTargetName" value="dev">
        <not>
            <isset property="env.RELEASE_VER" />
        </not>
    </condition>

    <target name="show-props">
        <echo>property is ${fileTargetName}</echo>
    </target>

</project>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMaxim VekslerView Question on Stackoverflow
Solution 1 - JavaMichael MyersView Answer on Stackoverflow
Solution 2 - JavaJason DayView Answer on Stackoverflow
Solution 3 - JavatoolkitView Answer on Stackoverflow