Распределенный компилятор 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, чтобы получить артефакт в репозиторий артефактов.
Это должно работать даже с зависимыми модулями, однако для синхронизации потребуется некоторая работа.