Какие веб-фреймворки Java / Scala или .NET поддерживают изменение исходного кода и мгновенный запуск рабочего процесса e.i. без долгих процедур rebiuld / redeploy? - PullRequest
3 голосов
/ 10 апреля 2010

Насколько я вижу, ключевым преимуществом динамических языков, таких как Ruby или Python, по сравнению с Java / Scala / C # и т. Д. Является «горячее» применение ваших изменений исходного кода к работающему приложению. Какие платформы для JVM или .NET поддерживают один и тот же рабочий процесс - вносите изменения в конфигурацию и исходный код на лету? Могут ли они также отслеживать изменения в пользовательских конфигурациях и уведомлять приложение?

Примечание. Фреймворки для динамических языков в JVM / .NET, таких как Grails или Compojure, здесь не входят.

EDIT : Я имею в виду не только модификацию тела метода, но и добавление / удаление методов, полей и классов. Какое среднее время между завершением редактирования и наблюдением за изменениями в вашем браузере?

КРАСИВЫЕ РЕШЕНИЯ :

Ответы [ 4 ]

3 голосов
/ 10 апреля 2010

Отличный вопрос! В мире Java:

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

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

Кроме того, я знаю, что режим разработки GWT допускает произвольные изменения без необходимости перекомпиляции, я не думаю, что GWT был бы жизнеспособным конкурентом для непосредственного написания javascript, если бы у него не было этой функции , Однако имейте в виду, что GWT не является традиционной веб-инфраструктурой, все работает на стороне клиента.

Наконец, на стороне сервера есть платформа Play , которая также автоматически перезагрузит Java-классы с произвольными изменениями при обновлении браузера.

1 голос
/ 12 апреля 2010

Я использовал Лифт с JRebel без проблем. Вам просто нужно правильно настроить его, запустить веб-сервер в одном терминале и оставить другой терминал с maven scala::cc. Это автоматически перекомпилирует все (все необходимо , если вы используете конфигурацию здесь ), и JRebel немедленно сделает изменения доступными на веб-сервере.

0 голосов
/ 10 апреля 2010

Вам не нужны рамки для этого. Когда вы запускаете приложение Java из eclipse и изменяете исходный код, eclipse попытается вставить новый код в работающую виртуальную машину. Это работает даже в том случае, если заменяемые методы выполняются в данный момент (в этом случае выполнение метода начинается заново в начале метода). Некоторые изменения не могут быть развернуты в горячем режиме, например, удаление общедоступного метода или изменение отношений подтипа.

Конечно, если ваше приложение кэширует содержимое (например, задает чтение во время запуска), этот кэш не будет пересчитан, хотя вы, вероятно, можете вызвать метод анализа вручную в отладчике.

0 голосов
/ 10 апреля 2010

Сервер Apache Tomcat для Java-сервлетов имеет опцию конфигурации для «наблюдения» за ресурсами. Если отслеживаемый сервлет или веб-приложение изменяется (т. Е. Новый код загружается на сервер), Tomcat автоматически перезагружает его.

По моему опыту, эта функция несколько нарушена при смешивании с другими расширенными функциями (например, пользовательские каталоги), но в остальном работает так, как объявлено.

...