views:

428

answers:

3

Hi,

Is there a distributed compiler for java like distcc for C/C++?

Thanks Bala

+2  A: 

Maybe Jikes would work for you. You can achieve very similar effects with a clever ant script and nfs like filesystem...

Karol Wilk
Is not Java supposed to be compile once run anywhere?
Hamish Grubijan
@Ipthnc - what makes you think it is not? and how is that relevant to the question?
Peter Recore
+5  A: 

The direct answer to your question is "no". However, it probably would not help you anyway… compiling Java is very fast.

On a small project, the compilation is fast enough that you shouldn't really care. On a large project you would need to deal with throwing the file to compile over a network, and having to deal with potentially also throw across many megabytes of dependencies as well.

One thing that you can do to improve your compilation speed is to use the eclipse compiler instead of the Sun javac. The Eclipse compiler is multi-threaded, and so will, with luck, use all the cores of your machine.

It is probably also worth mentioning that Apple also recently , since in general, on newer hardware, it cost more time to get the code somewhere else to compile and back, than it did to just do the compilation locally. To quote Apple:

The single-computer build performance of Xcode has been improved to the point that distributed building with Distributed Network Builds is slower than local builds in most circumstances.

Paul Wagland
Good advice all around. This also ties in with Karol Wilk's answer, as I believe the Eclipse internal compiler and jikes are at least somewhat related, i.e. originate from (probably) common code. The Eclipse compiler "cheats" by compiling incrementally, and I think jikes knows to do this too.
Carl Smotricz
Jikes is written in C++, ecj is Java, so it's probably not common code.
Adam Goode
@Carl, ecj was written based on the Jikes experiences. Glad they did - javac needed competition.
Thorbjørn Ravn Andersen
"JDT Core is the Java infrastructure of the Java IDE. It includes: * An incremental Java compiler. Implemented as an Eclipse builder, it is based on technology evolved from VisualAge for Java compiler. " -- <http://www.eclipse.org/jdt/core/>
Paul Wagland
@Paul Wagland: To close the circle, the folks who built VisualAge have a big overlap with the people who built Eclipse, and belonged to the same company as those who built jikes. One big happy family called IBM, so I'd expect there to be a fair bit of commonality. @Adam Goode: Thanks for the reminder about Jikes being C++.
Carl Smotricz
+1  A: 

If you're annoyed with waiting a long time for your java compiles, then you might consider one of the following:

  • break your project up into several different jar files (in a hierarchic dependency). With any luck, your changes will only affect source in one of those jars, while the others can continue to serve as dependencies.
  • break your project into groups of sources, perhaps by package, and use Apache ant to coordinate your compiling. I was always too lazy to use it, but you can set up explicit dependency management to avoid re-compiling stuff for which .class files already exist and are newer than the source. The effort that goes into setting this up once can reap dividends within a few days if the project is large and compiles are chewing up a lot of your time.

As opposed to multi-coring, reducing the amount of code that you need to recompile will also reduce your PC's energy consumption and carbon footprint ;)

Carl Smotricz