Phil is right Jean. Independently of splitting the code in subsystems, which
is always a good idea, even if you can't do that you can split the compile
of a single source tree into several passes using regular <javac>. This can
even enforce dependencies of the code compiled by the different passes. The
trick is to reset the sourcepath that <javac> normally sets.
I include here an example for reference. Hope this helps. --DD
<!-- =====================================================
Compile the java code from src/ into build/classes
-->
<target name="-classes">
<mkdir dir="build/classes/META-INF" />
<mkdir dir="build/testclasses" />
<!-- Avoid warning message about memoryMaximumSize being ignored
when not forking <javac>, and instead specify directly the
JVM argument only when forking... Convoluted, but works! -->
<property name="javac.memoryMaximumSize.true" value="-J-Xmx512m" />
<property name="javac.memoryMaximumSize.false" value="" />
<property name="deprecation" value="true" />
<macrodef name="compile">
<attribute name="fork" default="false" />
<attribute name="srcdir" default="src" />
<attribute name="destdir" default="build/classes" />
<element name="sources" implicit="true" optional="true" />
<sequential>
<javac srcdir="@{srcdir}" source="1.4"
destdir="@{destdir}" sourcepath=""
deprecation="${deprecation}" debug="true" verbose="false"
includeAntRuntime="false" fork="@{fork}">
<!-- equivalent to <javac ... memoryMaximumSize="512m"> -->
<compilerarg line="[EMAIL PROTECTED]" />
<classpath refid="classpath" />
<sources/>
</javac>
</sequential>
</macrodef>
<!-- compile FOO first, -->
<compile fork="true">
<include name="com/acme/foo/**" />
<include name="com/acme/app/foo/**" />
</compile>
<!-- then BAR, -->
<compile>
<include name="com/acme/bar/**" />
<include name="com/acme/app/bar/**" />
<include name="com/acme/testing/utils/TestAlgo*.java" />
</compile>
<!-- then the package-private tests, -->
<compile srcdir="test" destdir="build/testclasses" />
<!-- and finally the examples. -->
<compile>
<include name="com/acme/examples/**" />
</compile>
</target>
> -----Original Message-----
> From: Phil Weighill Smith [mailto:[EMAIL PROTECTED]
>
> Why not simply put two calls to javac in your build script and split the
> source tree in two in the same way that you have in your new task,
> passing one tree to the first call and the other to the second?
>
> Clearly you need to ensure that the first call compiles "pre-requisite"
> code for the second call and that you should avoid cyclic references
> between the two sets of classes.
>
> On Tue, 2005-07-12 at 00:12 -0700, Jean Lazarou wrote:
> > We had problem with a (legacy) build from scratch, seems that, because
> we have too many java files to compile, nothing is compiled (both on Linux
> and Windfoos2000).
> >
> > After spending 4 days on that, I decided to split the compilation, I
> created a new task, name "bydir-javac". The task is derived from Javac.
> >
> > Can I publish this? Is it a better way of doing it?
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]