Hot Deploy

Jmix поддерживает технологию Hot Deploy, которая позволяет отображать сделанные в проекте изменения в работающем приложении без необходимости перезапускать сервер.

Hot deploy работает для следующих классов и ресурсов:

  • Дескрипторы и контроллеры экранов;

  • Классы, используемые контроллерами экранов через создание экземпляров или статические методы;

  • Локализованные сообщения;

  • Меню;

  • Фетч-планы;

  • Ресурсные роли;

  • Роли уровня строк.

Hot deploy не работает для классов сущностей и бинов Spring.

Принцип работы Hot deploy следующий:

  • Studio обнаруживает измененные файлы и

    • если это файл ресурсов, Studio копирует его в каталог .jmix/conf;

    • если это файл Java или Kotlin, Studio компилирует его и копирует файл класса в каталог build/classes проекта.

  • Когда приложение открывает экран, фреймворк загружает новые классы и ресурсы из каталогов перечисленных выше.

Расположение каталога hot deploy ресурсов определяется свойством приложения jmix.core.conf-dir. Этот каталог очищается при запуске приложения действием Before launch, заданным в параметрах конфигурации Run/Debug.

Кроме того, чтобы обеспечить более надежную очистку, не зависящую от Studio, предусмотрена Gradle задача под названием cleanConf. Эта задача выполняется каждый раз перед запуском приложения с помощью задачи bootRun.

Если у вас возникнут какие-либо проблемы с этой функцией, вы можете отключить задачу cleanConf в вашем проекте, добавив следующее свойство в файл build.gradle:

jmix {
    // ...
    confDirCleanupEnabled = false
}

Кроме того, Studio посылает приложению специальные сигналы, для того чтобы заставить его очистить кэши и перезагрузить измененные ресурсы. Это кэш локализованных сообщений и конфигурации представлений, зарегистрированных экранов и меню. Сигналы реализованы с помощью триггер-файлов, создаваемых в каталоге .jmix/temp/triggers (расположение может быть изменено с помощью свойства jmix.core.temp-dir).

После сохранения изменений в Studio может потребоваться 2-3 секунды для того, чтобы приложение перезагрузило ресурсы и классы. Если после открытия экрана вы не увидели ожидаемых изменений, попробуйте обновить страницу браузера еще раз.

Индикатор hot deploy

В Studio в правом верхнем углу файлов, поддерживающих hot deploy, отображается значок индикатора статуса. Этот значок, который виден на файлах, таких как контроллеры экранов, дескрипторы экранов, пакеты сообщений, роли и другие подобные ресурсы, позволяет мгновенно оценить текущий статус hot deploy для конкретного файла.

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

Рассмотрим различные состояния индикатора hot deploy.

  1. Приложение не запущено:

    hot deploy ind 1

    Индикатор имеет серые границы. При нажатии на индикатор появляется всплывающее сообщение с предложением запустить приложение.

  2. Приложение запущено, изменения в файле отсутствуют:

    hot deploy ind 2

    Индикатор имеет зеленые границы. При нажатии на индикатор появляется всплывающее сообщение, указывающее, что hot deploy для файла еще не выполнялся.

  3. Файл изменен, hot deploy доступен: Индикатор становится полностью зеленым. При нажатии на индикатор появляется всплывающее сообщение с предложением запустить hot deploy.

    hot deploy ind 3

    После запуска hot deploy индикатор остается полностью зеленым, а во всплывающем сообщении отображается время последнего hot deploy:

    hot deploy ind 4
  4. Hot deploy не удался: Индикатор становится красным, указывая на то, что hot deploy не удался из-за ошибки компиляции или другой проблемы.

    hot deploy ind 5