Подтвердить что ты не робот

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

Я ищу способ повысить производительность своей команды, и один из способов сделать это - сократить время, затрачиваемое на компиляцию, и unit test, а также упаковать и развернуть наше приложение Java EE, которое становится все больше и больше.

Тривиальное решение, которое я знаю, - это создать мощный компьютер с N процессорами (N ~ = несколько разработчиков) и невероятно быструю дисковую систему и много памяти, и запустить все на этом компьютере и подключиться к нему через X удаленно. Это было бы намного быстрее, чем компиляция на наших ноутбуках, но все же дешевле и легче поддерживать, чем покупать каждому разработчику свой собственный суперкомпьютер.

Есть ли другой способ решить эту проблему? Например, можем ли мы запускать наши IDE локально, а затем сообщать об этом удаленному компилятору java-источника? Может ли Netbeans/Eclipse/IntelliJ/т.д. Сделать это? Или есть специальный инструмент, который позволяет удаленную компиляцию java, также использующую несколько процессоров? Он не должен быть свободным/открытым исходным кодом.

К сожалению, наши ноутбуки ДОЛЖНЫ запускать (управляемую компанией) Windows Vista, поэтому еще одна причина пойти на отдельный серверный компьютер - позволить нам использовать Linux на нем и, наконец, избавиться от раздражающей управляемой среды.

EDIT:, чтобы подытожить ответы до сих пор, один из способов сократить время сборки - оставить компиляцию для разработчиков по отдельности (поскольку компиляция должна быть быстрой), пропустить текущие модульные тесты и горячие -deploy (без упаковки) в контейнер.

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

РЕШЕНИЕ. Я принял решение Thorbjørn, так как считаю, что это будет ближе всего к тому, как я планирую продолжить. Хотя из любопытства я все еще заинтересован в решении исходной проблемы (= удаленная компиляция Java)...

4b9b3361

Ответ 1

Вам необходимы два рабочих процесса.

  • Строка ОФИЦИАЛЬНАЯ, которая проверяет источники, строит все с нуля, запускает все модульные тесты, а затем создает биты, которые в конечном итоге отправятся клиенту после тестирования.
  • Горячее развертывание разработчиков после изменения каждого исходного кода в контейнере, о котором знает IDE.

Эти два могут быть совершенно разными!

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

Для разработчиков загляните в подходящий контейнер с очень хорошими вариантами развертывания IDE и настройте его для использования для каждого разработчика. Это ОЧЕНЬ быстро окупится! Ранее JBoss был очень хорош для этой цели.

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


Посмотрите, что Джоэл думает о Build Server: http://www.joelonsoftware.com/articles/fog0000000023.html

Если вам не нравится Дженкинс, существует множество других.

(2016): Хадсон изменился на Дженкинса. Смотрите fooobar.com/questions/16002/... историю изменений имени)

Ответ 2

Обычно для настройки сервера сборки, например. hudson выполнить компиляцию/упаковку/модульное тестирование/развертывание.

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

Для вашего проекта нужна система сборки, которая позволяет вам строить, тестировать и упаковывать. Hudson является хорошим примером такой системы построения непрерывной интеграции.