How can I get the javac task to use an existing fileset? In my build.xml I have 
created several filesets to be used in multiple places throughout build file. 
Here is how they have been defined:

    <fileset dir = "${src}"
        id       = "java.source.all">
      <include name =  "**/*.java" />
    </fileset>

    <fileset dir = "${src}"
        id       = "java.source.examples">
      <include name = "**/Examples/**/*.java" />
    </fileset>

    <fileset dir = "${src}"
        id       = "java.source.tests">
      <include name = "**/Tests/*.java" />
    </fileset>

    <fileset dir = "${src}"
        id       = "java.source.project">
      <include name = "**/*.java"             />
      <exclude name = "**/Examples/**/*.java" />
      <exclude name = "**/Tests/**/*.java"    />
    </fileset>

I have also used macrodef to compile the java files so the javac task does not 
need to be repeated multiple times. The macro looks like this:

  <macrodef name="compile">
    <attribute name="sourceref"/>
    <sequential>
      <javac srcdir         = "${src}"
          destdir           = "${build}"
          classpathref      = "classpath"
          includeantruntime = "no"
          debug             = "${debug}">
        <filelist dir="." files="@{sourceref}" />  <-- email is about this
      </javac>
    </sequential>
  </macrodef>

What I'm trying to do is compile only the classes that are needed for specific 
targets not all the targets in the source tree. And do so without having to 
specify the files every time. Here are how the targets are defined:

  <target name = "compile-examples"
      depends  = "init">
    <compile sourceref = "${toString:java.source.examples}" />
  </target>

  <target name = "compile-project"
      depends  = "init">
    <compile sourceref = "${toString:java.source.project}" />
  </target>

  <target name = "compile-tests"
      depends  = "init">
    <compile sourceref = "${toString:java.source.tests}" />
  </target>

As you can see each target specifies the java files to be compiled as a 
simi-colon separated list of absolute file names. The only problem with this is 
that javac does not support filelist. It also does not support fileset, path or 
pathset. I've tried using <include name = "@{sourceref}" /> but it treats the 
list as a single file name. Another thing I tried is sending the reference 
directly (not using toString) and using <include ref = "@{sourceref}" /> but 
include does not have a ref attribute.

I've done a search of this list and noticed another person with a similar 
problem. But while it was discussed no solution was presented.

SO THE QUESTION IS: How do you get the javac task to use a reference to a 
fileset that was defined in another part of the build file? I'm not interested 
in solutions that cause me to have multiple javac tasks. Completely re-writting 
the macro is acceptable. Changes to the targets are also acceptable provided 
redundant code between targets is kept to a minimum.

p.s. Another problem is that fileset wants a comma separated list. I've only 
done a brief search for a way to convert semi-colons to commas and haven't 
found a way to do that.

p.p.s. Sorry for the yelling but some people are too quick to post responses 
that don't address the subject.

Reply via email to