Eventually three further solutions based on Flaka:
1. Using Flaka's Expression Language (EL) ..
<project xmlns:f="antlib:it.haefelinger.flaka">
<f:install-property-handler />
<property environment="env"/>
<property name="JOF" value="#{ '${env.BUILD_BOX}'.tolower == 'true'
? 'F:/Inetpub/wwwroot/wo30' : 'C:/Inetpub/wwwroot/wo30' }" />
<echo>${JOF}</echo>
</project>
$ BUILD_BOX=tRue ant -lib ~/lib/flaka/ant-flaka-1.02.01.jar
[echo] F:/Inetpub/wwwroot/wo30
$ BUILD_BOX=false ant -lib ~/lib/flaka/ant-flaka-1.02.01.jar
[echo] C:/Inetpub/wwwroot/wo30
2. Using Flaka's switch task ..
<project xmlns:f="antlib:it.haefelinger.flaka">
<property environment="env"/>
<f:switch value="${env.BUILD_BOX}">
<re expr="true" ignorecase="true">
<property name="JOF" value="F:/Inetpub/wwwroot/wo30" />
</re>
<otherwise>
<property name="JOF" value="C:/Inetpub/wwwroot/wo30" />
</otherwise>
</f:switch>
<echo>${JOF}</echo>
</project>
Here the value of environment variable BUILD_BOX will be matched using
regular expressions (<re />). This task would be suitable for carrying
out more complex actions than just setting a property.
3. Using Flaka's choose task ..
<project xmlns:f="antlib:it.haefelinger.flaka">
<f:install-property-handler />
<property environment="env"/>
<f:choose>
<when test=" '${env.BUILD_BOX}'.tolower == 'true'">
<property name="JOF" value="F:/Inetpub/wwwroot/wo30" />
</when>
<otherwise>
<property name="JOF" value="C:/Inetpub/wwwroot/wo30" />
</otherwise>
</f:choose>
<echo>${JOF}</echo>
</project>
Similar to <switch /> task, just without power of regular (or glob)
pattern matching.
And, of course, there are <when /> and <unless /> ..
// Wolfgang
On Wed, Jun 8, 2011 at 3:01 PM, wolfgang haefelinger
<[email protected]> wrote:
> Hi,
>
>>> <condition property="JOF" value="F:/Inetpub/wwwroot/wo30">
>>> <isset property="env.BUILD_BOX"/>
>>> </condition>
>
> This would also enable the "build system settings" if environment
> variable BUILD_BOX is set to "false". Would be better to check
> existence and then variable's content as well - just to avoid any
> confusion.
>
> A second thought on maintaining such a script later on - you would
> move "F:/Inetpub/wwwroot/wo30" into a property cause you don't want to
> have such hard-wired paths in your build scripts, do you?
>
> Perhaps you should drop the idear of depending on environment
> variables and depend on (property) files instead, for example:
>
> <project>
> <property file="buildsystem.properties" />
> <property file="common.properties" />
> <echo>JOF=${JOF}</echo>
> </project>
>
> Property file "buildsystem.properties" would only exist on
> build-servers while "common.properties" is assumed to exist on
> developer and build-server hosts. Then
>
> == buildserver.properties ==
> JOF = F:/Inetpub/wwwroot/wo30
>
> == common.properties ==
> JOF=C:/Inetpub/wwwroot/wo30
>
> Notice that <property /> graciously ignores non-existent files. You
> may also want to put those <property /> tasks directly below <project
> /> to ensure that your properties are set before *any* target is
> executed. Btw, you should also assert that property JOF is set to
> avoid unexpected script behavior.
>
> // Wolfgang
>
>
>
>
> On Mon, Jun 6, 2011 at 7:33 PM, Brian McCann <[email protected]> wrote:
>> Hi Robert,
>>
>> couple questions to make sure I'm following you right.
>>
>> 1. I'm currently setting the value of JOF in the build.userproperties file
>> to " JOF=C:/Inetpub/wwwroot/wo30"
>> and even if I try to run a conditional in the build.xml file < property
>> name="JOF" value="F:/Inetpub/wwwroot/wo30"/>
>> The value of JOF gets set in stone when build.xml runs? Build.properties
>> files always override build.xml?
>>
>>
>>
>> 2. Since I already have a file build.user.properties I could just set the
>> default value of JOF path in that file like <property name="JOF"
>> value="C:/Inetpub/wwwroot/wo30"/> which would be the state that the build
>> file is not being run on the build box?
>>
>> so your code would look like:
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <project name="plugin-rules" basedir="." default="setJOF">
>> <target name="setJOF">
>> <property environment="env"/>
>> <echo>BUILD_BOX = ${env.BUILD_BOX}</echo>
>> <condition property="JOF" value="F:/Inetpub/wwwroot/wo30">
>> <isset property="env.BUILD_BOX"/>
>> </condition>
>> <echo>JOF = ${JOF}</echo>
>>
>> <property file="build.user.properties" />
>> <echo>After Property file, JOF = ${JOF}</echo>
>> </target>
>>
>> </project>
>>
>> Thanks,
>> BPM
>>
>>
>> -----Original Message-----
>> From: Echlin, Robert [mailto:[email protected]]
>> Sent: Monday, June 06, 2011 12:46 PM
>> To: Ant Users List
>> Subject: RE: How change variable based on environment variable value
>>
>> Hi Brian,
>> Try this code.
>> Note: you can't put the default value of JOF into a file that will be loaded
>> automatically when ant is run, such as (home)/.antrc,
>> as that would set JOF before your code executes. First set works, last set
>> fails.
>>
>> On the other hand, you could set "JOF_default" in a properties file that is
>> loaded before this code is run, then have an "else" clause in your condition
>> to use it when BUILD_BOX is not set in your environment:
>> <condition property="JOF" value="F:/Inetpub/wwwroot/wo30"
>> else="${JOF_default}">
>>
>> Rob
>>
>> ------------ simplified code ----------
>> <?xml version="1.0" encoding="utf-8"?>
>> <project name="plugin-rules" basedir="." default="setJOF">
>> <target name="setJOF">
>> <property environment="env"/>
>> <echo>BUILD_BOX = ${env.BUILD_BOX}</echo>
>> <condition property="JOF" value="F:/Inetpub/wwwroot/wo30">
>> <isset property="env.BUILD_BOX"/>
>> </condition>
>> <echo>JOF = ${JOF}</echo>
>>
>> <property file="jof.properties" />
>> <echo>After Property file, JOF = ${JOF}</echo>
>> </target>
>>
>> </project>
>> ---------------- output of test run - no build-run ---------
>> C:\Documents and Settings\rechlin\My Documents\test\TEST-ant>set BUILD_BOX=
>>
>> C:\Documents and Settings\rechlin\My Documents\test\TEST-ant>echo
>> %BUILD_BOX%
>> %BUILD_BOX%
>>
>> C:\Documents and Settings\rechlin\My Documents\test\TEST-ant>ant -f
>> jof-test.xml
>> Buildfile: C:\Documents and Settings\rechlin\My
>> Documents\test\TEST-ant\jof-test.xml
>>
>> setJOF:
>> [echo] BUILD_BOX = ${env.BUILD_BOX}
>> [echo] JOF = ${JOF}
>> [echo] After Property file, JOF = C:/Inetpub/wwwroot/wo30
>>
>> BUILD SUCCESSFUL
>> Total time: 0 seconds
>> ------------------------ output of test run with BUILD_RUN set in the
>> environment ---------
>> C:\Documents and Settings\rechlin\My Documents\test\TEST-ant>set
>> BUILD_BOX=true
>>
>> C:\Documents and Settings\rechlin\My Documents\test\TEST-ant>echo
>> %BUILD_BOX%
>> true
>>
>> C:\Documents and Settings\rechlin\My Documents\test\TEST-ant>ant -f
>> jof-test.xml
>> Buildfile: C:\Documents and Settings\rechlin\My
>> Documents\test\TEST-ant\jof-test.xml
>>
>> setJOF:
>> [echo] BUILD_BOX = true
>> [echo] JOF = F:/Inetpub/wwwroot/wo30
>> [echo] After Property file, JOF = F:/Inetpub/wwwroot/wo30
>>
>> BUILD SUCCESSFUL
>> Total time: 0 seconds
>> --------------------------------------------------
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
>
> --
> Wolfgang Häfelinger
> häfelinger IT - Applied Information Technology
> http://www.haefelinger.it
>
--
Wolfgang Häfelinger
häfelinger IT - Applied Information Technology
http://www.haefelinger.it
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]