ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <ext-simon.stei...@nokia.com>
Subject RE: Is it possible to run a target for each file in a fileset?
Date Tue, 24 Jun 2008 19:28:48 GMT
Hi,

We do something like this:

	<for param="file">
          <path>
            <fileset dir="${my.dir}" includes="*.xml"/>
          </path>
          <sequential>
            <java classname="com.nokia.hello">
               <arg value="@{file}"/>
               <arg value="${server}"/>
            </java>
          </sequential>
        </for>

Thanks 

-----Original Message-----
From: ext Karr, David [mailto:david.karr@wamu.net] 
Sent: 24 June 2008 16:39
To: Ant Users List
Subject: RE: Is it possible to run a target for each file in a fileset?

It might be possible to mix in the capabilities of the "xmltask"
library.  This has the ability to call a target for every occurrence of
a particular xpath result value.  If you could find a way to generate an
xml doc with one element for each file name (perhaps using xmltask
itself), you could then use xmltask to implicitly iterate through the
occurrences.

> -----Original Message-----
> From: Andy Stevens [mailto:insomniacpenguin@googlemail.com]
> Sent: Tuesday, June 24, 2008 4:40 AM
> To: user@ant.apache.org
> Subject: Is it possible to run a target for each file in a fileset?
> 
> Hi,
> 
> I'm trying to include jslint in the build script for one of our web 
> apps, using Rhino to run the jslint.js javascript file.
> 
> Initially, I used
>         <java classname="org.mozilla.javascript.tools.shell.Main"
> failonerror="true" fork="true">
>             <arg value="lib/test/jslint.js"/>
>             <arg value="${build.web.dir}/javascript/main.js"/>
>             <classpath path="lib/test/rhinojs-1.7r1.jar"/>
>         </java>
> (an earlier target copies main.js from the original source folder to 
> the build directory ${build.web.dir}, applying some token 
> substitution).  This worked just fine.
> 
> However, but we have more javascript files than just main.js and 
> jslint only appears to expect one argument for the file to check.  So 
> I need to run the above on each of our files in turn.  Since this 
> didn't appear to be possible with <java> alone I turned to
>         <apply executable="java" verbose="true">
>             <arg value="-classpath"/>
>             <arg value="lib/test/rhinojs-1.7r1.jar"/>
>             <arg value="org.mozilla.javascript.tools.shell.Main"/>
>             <arg value="lib/test/jslint.js"/>
>             <fileset dir="${build.web.dir}/javascript" 
> includes="**/*.js"/>
>         </apply>
> Not ideal, but so long as there's a java executable on the path I 
> guess it'll work.  I'd rather have used <java> for the various 
> classpath etc. settings, but it'll do.  Perhaps one day some of this 
> behaviour might be included in the java task, or someone will come up 
> with an <applyjava> task that combines the two, or maybe the <apply> 
> task could be changed to specify/nest another target or task instead 
> of the executable...
> 
> The only problem with the above is that jslint.js doesn't output the 
> filename of the file it's processing, so if more than one javascript 
> file produces warnings, all I get is a bunch of line & column numbers 
> with no clue as to which of the problems are in which file(s) :-(  So 
> before it runs jslint each time I want to print the filename.  I 
> suppose I could create a batch file to do this (containing an echo and

> the above java command, each with %1 in their arguments) and have 
> <apply> call that, but I'd rather do it in the Ant script if possible.
>  I haven't found a way to combine the echo & java commands into a 
> single command line (separating them with ; just makes it ignore the 
> second command) so I'm wondering if it's possible to loop over the 
> fileset and call a separate target (containing <echo> and <java>
> tasks) for each one in turn, passing the filename in a 
> property/parameter?  Kind of like a cross between the <apply> and 
> <ant>/<antcall> tasks.
> 
> Is that possible, or is the batch file going to be the easiest way to 
> do what I need?  Or can anyone suggest another way I've not thought 
> of?
> 
> TIA,
> 
> 
> Andy.
> --
> http://pseudoq.sourceforge.net/  Open source java sudoku solver
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org For additional

> commands, e-mail: user-help@ant.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org For additional
commands, e-mail: user-help@ant.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message