2010-01-19 3 views
14

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

+0

У вас есть требование для одного или это просто любопытство? – skaffman

+0

Я хочу написать один. – Boolean

+0

Удачи! Помните те моменты, которые я поднимаю в своем ответе, и я желаю вам удачи в написании этого. –

ответ

16

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

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

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

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

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

+1

Хороший совет. Это также связано с ответом Карола Вилка, так как я считаю, что внутренний компилятор Eclipse и jikes по крайней мере несколько взаимосвязаны, т. Е. Происходят из (возможно) общего кода. Компилятор Eclipse «обманывает» путем компиляции поэтапно, и я думаю, что jikes знает, как это сделать. –

+0

Jikes написан на C++, ecj - Java, поэтому, вероятно, это не обычный код. –

+1

@Carl, ecj был написан на основе опыта Jikes. Рад, что они сделали - джавак нуждался в конкуренции. –

2

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

+0

Разве Java не должна компилироваться после запуска в любом месте? –

+7

@ Ipthnc - что заставляет вас думать, что это не так? и как это относится к вопросу? –

3

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

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

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

+1

... предполагая, что ваш компьютер получает энергию от ископаемого топлива –

0

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

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

2

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

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

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

Смежные вопросы