Hi.
I have allready sent this message but I 
believe it wasn't delivered, so i try again.
 
I am currently working on a very large
project and among other, I am in charge
of the build process in which we use ant.
I really like ant and its ideas and I've
decided to get involved in the project.
 
During the development of our project, the
issue of incremental build had been brought
up several times while using ant. In my
opinion - it is one of ant's biggest flaws.
I'll explain.
 
We maintain all the build process as ant
files in order to run nightly builds. The
problem is that the build process is not
applicable for a developer who had changed
two-three files and want to run the project
and test his/her changes. The full build
process is highly time consuming - which
is ok for night builds, yet unbearable for
developers. The catch is that we don't want
to re-write the building process in our IDE
in order not to increase maintenance time
and error probability of our building
process. As for now, we maintain the
classpaths and more of the build process
(packing..) in two places - in the build
file and in the IDE.
 
My suggestion is to add ant a support
for incremental build in the task level.
Since the current state is that tasks
do not support incremental build, this
will remain the default. A -incremental
option will be supported as an argument
to ant, and then every task will be
able to test the incremental flag of
the project, and behave accordingly.
For example - the copy task will behave
under incremental build as follows - it
will copy the files only if they do not
exist or if they are "younger" at the
target dir. Another example - the jar
task will behave under incremental build
as follows - it will touch the file
only if one of the source files for
the jar is "older" than the jar itself
(pitfall - if the build process will
use the same jar file name to create
two different archives - by the second
jaring the jar will be assumed as newer
than its source files and therefore will
not be packed). There are problems with
adding support to all the tasks (for
example delete) but it seems that it all
can be solved elegantly (as for the
delete problem, using sync task instead
of delete and then copy will allow adding
the incremental support to the sync task).
 
The beauty is that after adding support
for the -incremental option, it does not
affect the tasks immediately, and instead
you can go over it one by one, slow and
easy, and add the incremental support. In
other words - the change can be done with
out adding the support to any task and can
be a part of the new version even without
task support - which makes this change much
more subtle.
 
The advantages are that ant will become
a tool also for the developers, and the project will
have a single point of build definition
rather than two or more. Ant was said to
have all the advantages of makefiles, but
the lack of incremental support is definitely
an advantage of makefiles which I miss the most.
 
What do you say?

Gu Dev.


---------------------------------
Do you Yahoo!?
Free online calendar with sync to Outlook(TM).

Reply via email to