How large is your codebase that you are looking to use incremental compilation. Most java compilers are pretty fast and re-compiling 1000 classes doesn't take very long (couple seconds).

The issue is that the tool that determines if a class needs to be re- compiled must fully understand the structure of all the other classes in the compilation unit. This generally means parsing the source or the bytecode. This requires almost as much work as compiling the entire codebase again.

On the flip side, most IDEs keep a graph of dependencies that they are constantly rebuilding as you work. Making this same sort of thing work for Ant calling javac would mean writing out a file somewhere that stored the graph and loading it up before the build runs. The trick is to keep that graph up to date. What it would probably mean is that you probably end up spending more time rebuilding the graph and then compiling during a build.

Unless you could hook into the graph that the IDE creates, you'll probably better off just re-compiling the code base.

-bp

On Mar 21, 2009, at 7:52 AM, Sven Köhler wrote:

Hi,

according to the docs it seems, that ant is (still) not suitable for incremental compilation. Is that true?

Quote from the docs of the depend task:

********************************************************************
The most obvious example of these limitations is that the task can't tell which classes to recompile when a constant primitive data type exported by other classes is changed. For example, a change in the definition of something like

public final class Constants {
 public final static boolean DEBUG=false;
}

will not be picked up by other classes.
********************************************************************


Yes, the good constant-inlining. So there is really nothing implemented to detect that? That is: if I don't do an "ant clean" once in a while, then i will have inconsistent class files?

I'm rather amazed. But the trouble seems to be, that modern javac doesn't generate any dependency information in addition to or inside the class files. Is that right?


Regards,
 Sven


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org

Reply via email to