I've got a ant build.xml
that uses the <copy>
task to copy a variety of xml files. It uses filtering to merge in properties from a build.properties
file. Each environment (dev, stage, prod) has a different build.properties
that stores configuration for that environment.
Sometimes we add new properties to the Spring XML or other config files that requires updating the build.properties
file.
I want ant to fail fast if there are properties missing from build.properties
. That is, if any raw @...@
tokens make it into the generated files, I want the build to die so that the user knows they need to add one or more properties to their local build.properties.
Is this possible with the built in tasks? I couldn't find anything in the docs. I'm about to write a custom ant task, but maybe I can spare myself the effort.
Thanks
If you are looking for a specific property, you can just use the fail task with the unless attribute, e.g.:
<fail unless="my.property">Computer says no. You forgot to set 'my.property'!</fail>
Refer to the documentation for Ant's fail task for more detail.
You can do it in ant 1.7, using a combination of the
LoadFile
task and thematch
condition.I was going to suggest that you attempt to use
<property file="${filter.file}" prefix="filter">
to actually load the properties into Ant, and thenfail
if any of them are not set, but I think I was interpreting your problem wrong (that you wanted to fail if a specified property was not set in the properties file).I think your best bet might be to use
<exec>
to (depending on your dev platform) do a grep for the "@" character, and then set a property to the number of occurences found. Not sure of exact syntax but...if exec command is deprecated in your version of ant you can use redirectors, something like:
to create the token.found property
for the conditonal
Since Ant 1.6.2
condition
can also be nested insidefail
.The following macro makes it easy to conditionally check multiple properties.