Boolean
Boolean

Reputation: 14654

Distributed Java Compiler

Is there a distributed compiler for Java, analogous to distcc for C/C++?

Upvotes: 20

Views: 6972

Answers (5)

Wozza Xing
Wozza Xing

Reputation: 21

I did write the start of one for java6

http://www.pointdefence.net/jarc/index.html

It's distributed at the java compiler task. So it would work well with parallel compilation of independent Maven modules.

Upvotes: 2

Rostislav Matl
Rostislav Matl

Reputation: 4543

I think the parallel compilation of independent Maven modules should be quite easy using some simple scripts - just pull from version control, change dir and run mvn clean compile. Add mvn deploy to get the artifact to your artifact repository.

This should work even with dependent modules, will need some work on synchronization though.

Upvotes: 0

Paul Wagland
Paul Wagland

Reputation: 29129

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 reduced distcc support, 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.

Upvotes: 15

Carl Smotricz
Carl Smotricz

Reputation: 67790

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 ;)

Upvotes: 3

bgs
bgs

Reputation: 1250

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

Upvotes: 3

Related Questions