René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
Ant, properties, precedence and a surprise | ||
build.xml
<project default="print_some_properties" name="Use Property Files"> <property name="prop1" value="coke" /> <property file="build_1.properties" /> <property file="build_2.properties" /> <property name="prop5" value="fanta" /> <target name="print_some_properties" > <echo message="prop1: ${prop1}" /> <echo message="prop2: ${prop2}" /> <echo message="prop3: ${prop3}" /> <echo message="prop4: ${prop4}" /> <echo message="prop5: ${prop5}" /> </target> </project>
As can be seen, if Ant is invoked with this build.xml file, it tries to build the default target print_some_properties. This target
does nothing except printing the values of the five properties prop1 through prop5.
This build.xml alse references two property files that set some properties. Here's their content:
build1.properties
prop3=apple prop4=pear prop5=banana build2.properties
prop1=Chigaco prop2=New York prop3=San Francisco
Now, what do you think, will this print if Ant is invoked like so:
c:\> Ant
I didn't read the specification and I assumed that properties can and are overridden, that is, prop1 would be Chigaco (because it is overriden
by build_2.properties, and that prop3 would be San Francisco. However, the output was:
Buildfile: build.xml print_some_properties: [echo] prop1: coke [echo] prop2: New York [echo] prop3: apple [echo] prop4: pear [echo] prop5: banana BUILD SUCCESSFUL Total time: 0 seconds
I missed the following sentence in the Ant manual: Properties are immutable: whoever sets a property first freezes it for the rest of the build; they are most definately not variable.
|