| Invoking a target (Ant 1.7) in a loop (Ant-Contrib) | Invoking a target (Ant 1.7) in a loop (Ant-Contrib) 2007-01-17 - By Rebo, Alex
Thank you, Steve!
The idea was to "unload" the heavy construct such as: <target name="selfCheck"> ... <if> <equals arg1="${doNotHaveCheckSums}" arg2="true" /> <then> <for param="fileToWorkOn"> <path> <fileset refid="extentionLibs" /> </path> <sequential> <checksum file="@{fileToWorkOn}" algorithm="MD5" /> <echo> Created checksum file for @{fileToWorkOn}. </echo>
</sequential> </for> </then> <else> <for param="fileToWorkOn"> <path> <fileset refid="extentionLibs" /> </path> <sequential> <checksum file="@{fileToWorkOn}" verifyProperty="doesCheckSumMatch" /> <fail message="Checksum verification failed for @{fileToWorkOn}."> <condition> <equals arg1="${doesCheckSumMatch}" arg2="false" /> </condition> </fail>
</sequential> </for> </else> </if> <echo> "Self check done." </echo> </target>
with:
<target name="selfCheck"> ... <if> <equals arg1="${doNotHaveCheckSums}" arg2="true" /> <then> <foreach target="computeCheckSum" param="fileToWorkOn" inheritall="true"> <path> <fileset refid="extentionLibs" /> </path> </foreach> </then> <else> <foreach target="verifyCheckSum" param="fileToWorkOn" inheritall="true"> <path> <fileset refid="extentionLibs" /> </path> </foreach> </else> </if> <echo> "Self check done." </echo> </target>
<target name="computeCheckSum" if="doNotHaveCheckSums"> <checksum file="${fileToWorkOn}" algorithm="MD5" /> <echo> Created checksum file for ${fileToWorkOn}. </echo> </target> <target name="verifyCheckSum" unless="doNotHaveCheckSums"> <checksum file="${fileToWorkOn}" verifyProperty="doesCheckSumMatch" /> <fail message="Checksum verification failed for ${fileToWorkOn}."> <condition> <equals arg1="${doesCheckSumMatch}" arg2="false" /> </condition> </fail> </target>
In my mind the "if-then-else" block looks cleanly this way. On top, target contra to macrodef can be executed conditionally (if/unless)
You are correct pointing out that if a target can't be invoked all by itself (answer to your Q: "do you ever execute ant using that as a target or is it a utility type thing?" is "No") it should be a target. Per Dominique's suggestion I replaced "foreach" with "for" thus loosing the ability to call a target within loops body. If I can figure out how to put macrodefs in place of a target, I might try to "unload" the body of the loop.
Do you think it's worse the effort, Steve?
PS.: Could you, please, elaborate on "In Ant 1.7, many support resources, which provides you even more ways to source data."?
-----Original Message----- From: Steve Loughran [mailto:stevel@(protected)] Sent: Wednesday, January 17, 2007 06:02 To: Ant Users List Subject: Re: Invoking a target (Ant 1.7) in a loop (Ant-Contrib)
Rebo, Alex wrote: > Hello! > > In attempt to compute checksums for all files in a directory I wrote this: > > <fileset id="myLibs" dir="${extention}"> > <include name="*.jar"/> > </fileset> > > ..... > > <target name="thisTargetName"> > <foreach target="computeCheckSum" param="fileToWorkOn" > inheritall="true"> > <path> > <fileset refid="myLibs" /> > </path> > </foreach> > </target> > > .... > > <target name="computeCheckSum"> > <checksum file="${fileToWorkOn}" algorithm="MD5" /> > <echo> > Created checksum file for ${fileToWorkOn}. > </echo> > </target>
I want to ask an even sillier question. why not just hand the entire fileset to <checksum>?
<checksum algorithm="MD5" > <fileset refid="myLibs" /> </checksum>
No macros, no iteration; ant does the bulk work with depdnency logic. See example 7 and 8 in the checksum page in teh manual.
Remember: most Ant tasks are designed to work in bulk, with filesets or paths as params. In Ant 1.7, many support resources, which provides you even more ways to source data.
-Steve
--------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscribe@(protected) For additional commands, e-mail: user-help@(protected)
--------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscribe@(protected) For additional commands, e-mail: user-help@(protected)
|
|
 |