It might be worth it to post at least part of your build script to the list to help explain your problem.


I suggest that because I might be misunderstanding what you are saying. Are you suggesting that Ant doesn't compile/move/copy/jar, etc only what's necessary (i.e., stale files)? Because it does, and your build script might be deleting the effort of the previous builds and causing everything to be done from scratch.

If that is in fact the case, then the issue is that your script does destructive builds, not that Ant doesn't only update whats necessary. If you can isolate your deleting to "clean" targets, then your automated build can call clean, then build and your developers can just build.

Let us have a look at the significant parts of the script. If you aren't permitted to post sanitized parts of your build by your company, just examine the script for deletes and try to consolidate them into a target which only the nightly build calls.

-Bravo

Gu Dev wrote:

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