I tuned the example...
<!-- Define a new 'task' for easier use -->
<macrodef name="jsmin">
<!-- Where to find the development version of JavaScript files
-->
<attribute name="srcDir"/>
<!-- Where to store the 'compressed' files -->
<attribute name="destDir"/>
<sequential>
<!-- Iterate over the JS-files and dont pass the filename
as argument -->
<apply executable="jsmin" addsourcefile="false">
<!-- Collect the JS-files -->
<fileset dir="@{srcDir}" includes="*.js"/>
<redirector>
<!-- redirect STDIN; fileset collects relative to its dir,
but we need relative to basedir -->
<inputmapper type="glob" from="*" to="@{srcDir}/*"/>
<!-- redirect STDOUT to file in dest-dir -->
<outputmapper id="out" type="glob"
from="*.js"
to="@{destDir}/*.js"/>
</redirector>
</apply>
</sequential>
</macrodef>
<target name="jsmin2">
<!-- compress the JavaScript files -->
<jsmin srcDir="src" destDir="dest"/>
<!-- print the compressed files out - for check only -->
<concat><fileset dir="dest"/></concat>
</target>
>-----Ursprüngliche Nachricht-----
>Von: Jakob Fix [mailto:[EMAIL PROTECTED]
>
>
>> <mapper id="out" type="glob"
>> from="*.js"
>> to="dest/*.js"/>
>
>"Map" (whatever this means exactly) each file ending in .js to
>dest/*.js. This will be used later on.
Mapping means applying a rule for converting a amount of names to
other names. You could think about using a
s#(.*)\.js#\dest\1.js#
but you got the meaning.
>> <apply executable="jsmin">
>> <fileset dir="src" includes="*.js"/>
>
>Create a fileset of all files in the src/ directory ending in
>.js. I guess this is represented internally as a list of
>absolute pathnames of all files ending .js in the src/
>directory. The apply task will then cycle through this list,
>file by file.
Nope - not the fileset itself gives you absolute filenames. The
DirectoryScanner used internally does that. Have a look at the
Tutorial "Tasks using Properties, Filesets & Paths" in the manual
for more about using filesets in tasks.
http://ant.apache.org/manual/tutorial-tasks-filesets-properties.html#filesets
>> <mapper refid="out"/>
>
> At least, I found you can put this element anywhere inside
>the apply task. Another thing, I commented this line out, and
>the results are the same. Bizarre?!
Havent looked at that. But maybe <apply> ignores nested <mappers> silently -
maybe only if a <redirector> is present. Main point here is the definition with
"id" and reusing it via "refid".
>And it works! Wow, that's what I call black magic.
Black magic is ok ... for the first (few) steps.
But we want to give more knowledge to convert that into "white magic" ;-)
>Although, there's still one minor hiccup; the input filename
>is passed to jsmin as an argument, but where? I know this
>because it re-appears at the beginning of the out output file
>as a comment, which is what jsmin does with additional
>arguments. (This is why I tried to uncomment the <mapper
>refid="out"/> line, but to no effect.)
Standard behaviour of <apply>, but can be switched off - as done in the
new code.
>Thanks a lot. Now, how can I contribute some documentation for this?
For what exactly?
Contributions are welcome as patches in bugzilla.
Jan
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]