Distributed Java Compiler

2019-03-25 00:45发布

问题:

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

回答1:

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.



回答2:

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



回答3:

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



回答4:

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.



回答5:

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.