Solution for How to get properties from ant antfile task
is Given Below:
When calling a task using <ant antfile="...">
, how do you get a property from within the <ant ...>
call? I ask because a Maven plugin — the maven-antrun-plugin
— uses this notation and states that using external files with this notation is recommended.
To see the code in a Maven project, click here: Retrieve value from external ant file for use in Maven project, or in an upstream bug report here.
Here’s the ant code:
<project default="run-test">
<target name="run-test">
<!-- Call using antfile notation -->
<ant antfile="build.xml" target="antfile-task"/>
<echo level="info">Outside antfile: my.val: ${my.val}</echo>
</target>
<target name="antfile-task">
<property name="my.val" value="just some test value"/>
<echo level="info">Inside antfile: my.val: ${my.val}</echo>
</target>
</project>
Output:
Buildfile: build.xml
run-test:
antfile-task:
[echo] Inside antfile: my.val: just some test value
[echo] Outside antfile: my.val: ${my.val}
A workaround to this limitation is to write-and-read a properties file with the properties requiring export using:
<propertyfile file="my.properties">
<entry key="my.val" value="${my.val}"/>
</propertyfile>
… and then read it back in using:
<property file="my.properties"/>
This has the disadvantage of an extra step, but does provide a bit of property encapsulation so that only the properties needed are exposed to the parent target.
Working example:
<project default="run-test">
<target name="run-test">
<!-- Call using antfile notation -->
<ant antfile="build.xml" target="antfile-task"/>
<!-- This will always be empty -->
<echo level="info">Outside antfile: my.val: ${my.val}</echo>
<!-- Read the props file -->
<property file="my.properties" description="read props from ant"/>
<!-- Now we have the correct value -->
<echo level="info">Props workaround: my.val: ${my.val}</echo>
</target>
<target name="antfile-task">
<property name="my.val" value="just some test value"/>
<echo level="info">Inside antfile: my.val: ${my.val}</echo>
<!-- Properties for export to maven -->
<propertyfile file="my.properties">
<entry key="my.val" value="${my.val}"/>
</propertyfile>
</target>
</project>