2010-10-01 3 views
16

Я ищу способ повысить производительность своей команды, и одним из способов сделать это было бы сокращение времени, необходимого для компиляции & unit test & package & Разверните наше приложение Java EE, которое становится все больше и больше.Удаленный компилятор Java

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

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

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

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

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

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

+0

@Gabor Kulcsar: Я не Java-профессионал, но, должно быть, я слышал о компиляции языка Just In Time для Java. Итак, вы говорите, что небольшое изменение в каком-то из ваших исходных кодов приведет к перекомпиляции всего приложения? Или ваше приложение слишком велико для компиляции регулярно? –

+0

Вы действительно имеете в виду компиляцию? Я спрашиваю, потому что компиляция занимает очень мало времени. Сколько у вас классов? – Qwerky

+0

Компиляция и единичный тест и упаковка являются минимальным требованием. Компиляция занимает наименьшее время, однако у нас есть ~ 10 проектов, которые зависят друг от друга, и мы используем Maven для создания сборки. Результатом сборки является файл EAR, который занимает около 2 минут для локального создания - плюс модульные тесты. Частичная компиляция часто не работает, и нам все равно придется переделать упаковку ... – egbokul

ответ

6

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

  1. ОФИЦИАЛЬНЫЙ сборки, которая проверяет источники, строит все это с нуля, запускает все модульные тесты, а затем строит биты, которые в конечном итоге корабль к клиенту после тестирования.
  2. Разработчик hot-deploying после преобразования каждого исходного кода в контейнер, о котором знает IDE.

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

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

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

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


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

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

(2016 редактировать:. Hudson изменен Дженкинс См https://stackoverflow.com/a/4974032/53897 за всю историю за изменением названия)

+0

Я признаю, что развертывание в Glassfish от Netbeans должно быть легким, но это не работает. Особенно если мы используем Maven, а не встроенный NetBeans ANT. Может быть, я перефразирую свой вопрос и попрошу IDE с наилучшим вариантом развертывания? – egbokul

+0

Дополнительная информация: мы решили перейти на JavaEE 6 full (EJB3.1, MDB, JPA2, JSF2 и т. Д.). Знаете ли вы о какой-либо среде IDE, отличной от Netbeans, которая поддерживает контейнеры JavaEE 6 (например, Glassfish 3) с горячим развертыванием? – egbokul

+0

Java EE 6 очень приятный. Я использую официальный плагин Glassfish для Eclipse, доступный на рынке Eclipse, который передислоцируется очень быстро. –

3

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

6

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

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

+1

У нас есть сервер сборки, который работает в ночное время. Я пробовал Хадсона (и мне это не понравилось), но я не понимаю, как это будет с нашей помощью. Как это помогает мне _before_ Я проверяю код, над которым я работаю? – egbokul

+0

Это не поможет вам с компиляцией, но она берет нагрузку с ваших компьютеров для запуска модульных тестов, упаковки, развертывания – nos

+0

+1 для Хадсона[email protected]: Получите разработчиков, чтобы они работали над филиалами в основном и только ночные сборки для багажника. Кроме того, вы можете сконфигурировать Hudson для сборки, когда он замечает фиксацию (с гистерезисом для повышения эффективности), и вы можете (независимо) сказать, смотреть ли он на багажник или ветку. Комбинация означает, что вы получаете автоматические сборки в тех местах, где разработчики выполняют большую часть своей работы, и определяют ночные сборки туловища (где вы выполняете функции только после того, как они, как полагают, работают, естественно). –

0

Что необходимо для вашего проекта - это система сборки здания, тестирования и упаковки для вас. Hudson - хороший пример такой системы построения непрерывной интеграции.

2

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

3

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

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