I've been using things like the following [ant v1.4beta2]:
<javac destdir="..." >
<src refid="idA" />
<classpath refid="idB" />
</javac>
where if "idA" points to something like
<!-- option A -->
<path id="idA" >
<fileset dir="${core.src.dir}" >
<include name="**/*.java" />
<exclude name="**/*.html" />
... and so on ...
</fileset>
</path>
then <javac> barfs with a message that some file in my ${core.src.dir} is
not a directory [the first file it finds during a recursive directory
traversal, it appears]. Obviously, it tries to recurse into that file and
that does not work, of course.
However, if I change my idA path such that it contains no nested
<fileset>'s and only straightforward path elements, like:
<!-- option B -->
<path id="idA" >
<pathelement path="${core.src.dir}" />
...
</path>
then it works. This forces me to move my includes and excludes into the
<javac> task itself, while I 'd rather group my inclusion/exclusion
patterns together with my path strucutres and reference it through a
refid. After all, I'd like to think about my <javac> operatin on a fileset
and I'd like to form such filesets elsewhere so I could re-use them
throughout the file.
I don't understand why the option A does not work. According to <javac>
documentation, "srcdir" is a path-like structure and is settable via
nested <src> elements. This is what I am doing in both cases. Also, per
documentation path-like structures are allowed to contain nested <fileset>
elements, which is what I am doing in option A. Yet it does not work --
could someone explain why?
It appears to me that I should change my way of thinking: instead of
<javac> being a target working with 2 filesets (srcdir, classpath, and
bootclasspath) I am supposed to think of it as a source fileset (srcdir)
that works with other filesets (classpath and bootclasspath). I don't
quite see why the latter would be more logical.
Thanks in advance,
Vlad
|