分布式Java编译器

是否有用于Java的分布式编译器,类似于C / C ++的distcc?

你问题的直接答案是“不”。 但是,无论如何它可能都无济于事……编译Java非常快。

在一个小项目中,编译速度足够快,你不应该真正关心。 在一个大型项目中,您需要处理抛出文件以通过网络进行编译,并且必须处理可能也会抛出许多兆字节的依赖项。

您可以做的一件事就是使用eclipse编译器而不是Sun javac来提高编译速度。 Eclipse编译器是multithreading的,幸运的是,它将使用您机器的所有内核。

可能还值得一提的是,Apple最近还减少了对distcc的支持 ,因为一般来说,在较新的硬件上,将代码编译到其他地方需要花费更多的时间来编译和返回,而不是只在本地进行编译。 引用Apple:

在大多数情况下,Xcode的单机构建性能已经提高到分布式网络构建的分布式构建比本地构建慢。

如果您对等待很长时间的Java编译感到恼火,那么您可能会考虑以下其中一项:

  • 将您的项目分解为几个不同的jar文件(在层次结构中依赖)。 运气好的话,您的更改只会影响其中一个jar中的来源,而其他更改可以继续作为依赖项。
  • 将项目分成多组源,可能是通过包,并使用Apache ant来协调编译。 我总是懒得使用它,但你可以设置显式的依赖关系管理,以避免重新编译.class文件已经存在且比源更新的东西。 如果项目很大并且编译会占用大量的时间,那么设置一次的努力可以在几天内获得收益。

与多核处理相反,减少重新编译所需的代码量也会降低PC的能耗和碳足迹;)

也许Jikes会为你效劳 。 你可以用聪明的ant脚本和类似文件系统的nfs实现非常相似的效果……

我确实为java6编写了一个开头

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

它分布在java编译器任务中。 因此,它可以很好地并行编译独立的Maven模块。

我认为使用一些简单的脚本可以很容易地并行编译独立的Maven模块 – 只需从版本控制中获取,更改dir并运行mvn clean编译。 添加mvn deploy以将工件获取到工件存储库。

这应该适用于依赖模块,但需要一些同步工作。