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

Как Grails или Play обнаруживают изменения и классы горячей перезагрузки?

Мне любопытно, знает ли кто-нибудь подробности о том, как такие структуры, как Grails или Play, обнаруживают изменения в коде и автоматически запускают перекомпиляцию без перезагрузки сервера приложений? Есть ли что-то специфическое для компилятора Groovy или его динамического характера, что позволяет это легко произойти?

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

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

Изменить: Я должен уточнить, что я не собираюсь строить плагин Grails так же хорошо, как понимать, что нужно сделать для любого приложения в контейнере сервлетов. т.е. я использую Groovy, но не Grails.

Edit2: Похоже, что у Play есть определенный режим DEV, который позволяет эту горячую перезагрузку: http://www.playframework.org/documentation/1.1.1/main#lifecycle

Я понимаю, что JRebel выполняет расширенное управление версиями классов через загрузчики классов, но я предполагаю, что веб-фреймворки, такие как Grails или Play, не добираются до этого уровня.

4b9b3361

Ответ 1

Воспроизведение делает это с помощью Eclipse JDT для компиляции кода во время выполнения.

Взгляните на следующий класс, который используется Play для выполнения необходимой компиляции во время выполнения.

https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java

Кроме того, просто обратите внимание на разницу между режимом DEV и режимом PROD в Play. Это дизайнерское решение разработчиков Play, которое, когда приложение помещается в режим "Производство", классы компилируются при запуске сервера и не проверяются на "горячую перезагрузку". Это имеет смысл, потому что в режиме PROD ваш код не должен меняться.

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