Pull to refresh

Практический опыт использования настоящего HotSwap

Reading time2 min
Views28K
Когда мы программируем, отлаживаем код, ищем пресловутый «баг», зачастую возникает ситуация, когда приходится перезапускать сервер приложений, чтобы увидеть наши изменения. Это приводит к тому, что нам приходится выходить из «потока», разрушать наш хрупкий песочный замок нейронных связей. Отвлекаться от текущей задачи и ждать-ждать-ждать, когда на сервере приложений будут доступны наши изменения. Порой это так утомительно… Как было бы здорово, сделать «горячую» замену измененных классов и сразу увидеть результат.

image

Многие из нас знают о существовании Java HotSpot VM Swap механизме, который позволяет сделать «горячую» замену и избежать перезапуск всего сервера приложений.

image

В IntelliJ IDEA можно использовать комбинацию клавиш (: Command+Shift+F9/ ⊞: Ctrl+Shift+F9)

В силу существующих ограничений Java HotSpot, позволяет это делать только для изменения тела существующих методов класса. В остальных случаях, измененные классы не будут обновлены при «горячей замене».

image

Для того что бы преодолеть это ограничение, можно воспользоваться Dynamic Code Evolution Virtual Machine (DCEVM) — это модификация Java HotSpot(TM) VM, что позволит делать неограниченное количество «горячих» замен классов в режими реального времени.

Иногда простой замены классов недостаточно, особенно при использовании различных фреймворков, например, Spring. В таких случаях необходимо учитывать «жизненный цикл» того или иного фреймворка. Для решений этой проблемы вместе с DCEVM можно использовать специальный агент HotSwapAgent, который расширяет возможности «горячей замены» и упрощает интеграцию с вашей любимой IDE.

Для интеграции с IntelliJ IDEA:

1. Установите специальный HotSwapAgent плагин.

image

2. Установите «Reload classes after compilation: Always» конфигурацию в IntelliJ IDEA в секции HotSwap.

image

3. Плагин позволяет активировать HotSwapAgent агент для всего проекта или для определенной конфигурации.

image

4. В случае успешной конфигурации при запуске в консоли будет отображаться сообщение «HOTSWAP AGENT».

image

5. Для «горячей замены» необходимо скомпилировать измененные классы, для этого используйте комбинацию клавиш (: Command+Shift+F9/ ⊞: Ctrl+Shift+F9).

Несколько примеров для наглядного представления:

Сценарий 1: Изменение тела метода класса.

image

Сценарий 2: Добавление метода внутрь класса, изменение контроллера.

image

Приятной "горячей" разработки!

Ссылки:
HotSwap plugin for IntelliJ IDEA, HotSwapAgent project, DCEVM
Tags:
Hubs:
Total votes 25: ↑23 and ↓2+21
Comments17

Articles