Распределенный компилятор Java

Есть ли распределенный компилятор для Java, аналогичный distcc для C/С++?

Ответы

Ответ 1

Прямой ответ на ваш вопрос - "нет". Тем не менее, это, вероятно, не поможет вам в любом случае... компиляция Java выполняется очень быстро.

В небольшом проекте компиляция выполняется достаточно быстро, и вам не все равно. В большом проекте вам нужно будет скомпоновать файл для компиляции по сети, а также иметь дело с потенциально также метать между многими мегабайтами зависимостей.

Одна вещь, которую вы можете сделать, чтобы улучшить скорость компиляции, заключается в использовании компилятора eclipse вместо Sun javac. Компилятор Eclipse является многопоточным, и, к счастью, он будет использовать все ядра вашей машины.

Вероятно, стоит также упомянуть, что Apple также недавно уменьшила поддержку distcc, так как в целом на более новом оборудовании было затрачено больше времени на получение код где-то еще, чтобы компилировать и обратно, чем он сделал, чтобы просто сделать компиляцию локально. Процитировать Apple:

Производительность Xcode с одним компьютером была улучшена до такой степени, что распределенное здание с распределенными сетевыми сборками происходит медленнее, чем локальные сборки в большинстве случаев.

Ответ 2

Если вас раздражает долгое время ожидания компиляции java, вы можете рассмотреть одно из следующего:

  • разбить проект на несколько разных файлов jar (в иерархической зависимости). Если повезет, ваши изменения повлияют только на источник в одной из этих банок, в то время как другие могут продолжать служить зависимостями.
  • разбивайте свой проект на группы источников, возможно, с помощью пакета, и используйте Apache ant для координации вашего компиляции. Я всегда был слишком ленив, чтобы использовать его, но вы можете настроить явное управление зависимостями, чтобы избежать повторной компиляции файлов, для которых .class файлы уже существуют и новее источника. Усилия, которые прилагаются к настройке один раз, могут получить дивиденды в течение нескольких дней, если проект большой, а компиляторы сильно пережевывают ваше время.

В отличие от многокорневых, сокращение количества кода, которое необходимо перекомпилировать, также уменьшит потребление энергии вашим компьютером и углеродный след;)

Ответ 3

Возможно, Jikes будет работать для вас. Вы можете добиться очень похожих эффектов с помощью умной ant script и nfs, такой как файловая система...

Ответ 4

Я написал начало для java6

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

Он распространяется в задаче java-компилятора. Таким образом, это будет хорошо работать с параллельной компиляцией независимых модулей Maven.

Ответ 5

Я думаю, что параллельная компиляция независимых модулей Maven должна быть довольно простой с использованием некоторых простых скриптов - просто вытащите из управления версиями, измените каталог и запустите mvn clean compile. Добавьте mvn deploy, чтобы получить артефакт в репозиторий артефактов.

Это должно работать даже с зависимыми модулями, однако для синхронизации потребуется некоторая работа.