Diane -
Maybe by using the includesfile="${cListFile}"
attribute might help out a bit.
Of course you would have to generate cListFile, but that's relatively straight forward, even
if you have complex conditions.
Follows is how we implemented a class list
[...
<target name="tools" depends="init">
<javac srcdir="${build}" destdir="${build}" includes="mkClist.java, mkDlist.java" />
</target>
<target name="mkLists" depends="tools">
<java classname="mkClist" args="${source} ${cListFile}" />
<java classname="mkDlist" args="${classes} ${dListFile}" />
</target>
<target name="make" depends="mkLists">
<javac srcdir="${source}"
destdir="${classes}"
includesfile="${cListFile}"
debug="${debugValue}"/>
</target>
...]
The code for mkClist -
import java.util.*;
import java.io.*;
public class mkClist {
public static void main(String[] args) throws Exception {
try {
DataOutputStream dOS = new DataOutputStream( new FileOutputStream(args[1]));
mkClassList(args[0],dOS);
dOS.close();
} catch (Exception exp) {
exp.printStackTrace();
System.out.println("\nmkClist takes two parameters, the directory and the file name to
which output is written to.");
System.out.println("Example -> java Source ..\\Source cList.txt\n\n");
}
}
private static void mkClassList(String name, DataOutputStream pdOS )throws Exception {
File dir = new File(name);
String fileSeperator = dir.pathSeparator;
String[] list = dir.list();
for (int i = 0; i < list.length;i++) {
File file = new File(dir,list[i]);
if (file.isDirectory()) {
mkClassList(name + dir.separator + list[i], pdOS);
} else {
if (list[i].toLowerCase().endsWith(".java") ) {
pdOS.writeBytes(name + dir.separator + list[i] + "\r\n");
}
}
}
}
};
*****************************
alan
-----Original Message-----
From: Diane Holt [mailto:holtdl@yahoo.com]
Sent: Friday, October 20, 2000 3:10 PM
To: ant-user@jakarta.apache.org
Subject: Re: Javac
I also have build-order issues (it makes me feel a whole lot better to
finally find someone else who does :) I have separate <javac> tasks, and
in the order the compiles should happen. One thing you have that's not
right is specifying the full package-path in "srcdir" -- <javac> doesn't
like that. You need to specify "srcdir" as the path leading up to where
the COM/pkg/etc. starts, then include the COM/pkg/etc. as part of the
filenames of the files you want this <javac> task to compile:
srcdir="${srcDir}
...
<include name="com/hcl/dal/Whatever.java"/>
etc.
But note -- there's no way I know of to prevent side-effect compiles (eg.,
I have a <javac> task that lists 2 source-files, but it ends up with 750
classfiles having been compiled, since Java compilers go build what they
need when they need it).
Diane
--- Dan MacKay <dan.mackay@KINGSTON.HUMMINGBIRD.COM> wrote:
> Hi all,
>
> Is it possible to have javac not compile a whole tree. I have to control
> the
> the order of compilation. My directory structure is as follows:
>
> root directory:
> file1.java
> file2.java
>
> sub_dir1:
> many files *.java
>
> sub_dir2:
> many files *.java
>
> sub_dir3:
> many files *.java
>
> I have to compile and stage these files at different points through the
> build process. I have to start at the root and compile the two files
> there
> to the exclusion of the rest of the files in the resident
> sub-directories.
> My initial niave attempt was as follows:
>
> <target name="compile" depends="getSource" >
> <!-- Build the root -->
> <echo message="Building the root"/>
> <javac optimize="${optimize}"
> srcdir="${srcDir}\com\hcl\dal\"
> destdir="${outDir}"
> classpath="${cdkDir}\lib/nova.jar;${outDir}"
> debug="${debug}"/>
> <!target>
>
> This blithly motors along and compiles the whole shebang,
> sub-directories
> included and eventually fails in the sub_dir1 build when it cannot find
> dependancies for resources have not been found because they have not
> been
> staged yet. Could someone give me an example of the includes/exclude
> directives that would be necessary to ensure that only file1.java and
> file2.java are compiled?
>
> Thanks
>
> Dan
>
=====
(holtdl@yahoo.com)
__________________________________________________
Do You Yahoo!?
Yahoo! Messenger - Talk while you surf! It's FREE.
http://im.yahoo.com/ |