热部署

Jmix 支持热部署技术,该技术支持将项目更改立即应用于正在运行的应用程序,而无需重新启动应用服务。

热部署支持下列类和资源:

  • 视图 XML 描述和控制器;

  • 视图控制器用来初始化或通过静态方法访问的类;

  • 本地化消息;

  • 菜单;

  • Fetch plans;

  • 资源角色;

  • 行级角色。

实体类和 Spring bean 不支持热部署。

热部署工作原理如下:

  • Studio 会检查更改的源文件:

    • 如果是资源文件,Studio 将这些资源文件复制到 .jmix/conf 文件夹;

    • 如果是 Java 或 Kotlin 源文件,Studio 会编译这些文件并复制到项目的 build/classes 文件夹。

  • 当应用程序打开新视图时,会从上述文件夹中加载新的类和资源文件。

热部署资源放置的文件夹位置通过 jmix.core.conf-dir 应用程序属性确定。在应用程序启动时,该文件夹会由 Run/Debug Configuration Settings 中配置的 Before launch 任务清空。

Studio 还会向应用程序发送信号,要求清除相应的缓存,以便加载更改后的资源。包括消息缓存、fetch plan 配置、注册的视图以及菜单项。信号是作为一个触发器文件放在 .jmix/temp/triggers 目录中(目录可通过 jmix.core.temp-dir 配置修改)。

应用程序可能需要 2-3 秒重新加载 Studio 保存后的类和资源文件。如果在打开的视图看不到期望的改动,可以尝试刷新网页。

热部署指示器

Studio 在支持热部署的文件顶部右上角会显示一个状态指示图标。这些文件包括视图控制器、视图 XML 描述、消息包、角色以及其他类似的资源文件,为特定文件的热部署显示一个快速反馈的状态信息。

设置这个指示器的目的主要是持续提醒开发者他们最新修改的文件是否对应用程序做了修改。图标的外观会不断变化,以反映修改是否成功部署还是在部署中,亦或部署失败,从而提供热部署状态的一个直观反馈。

下面是热部署指示器的不同状态。

  1. 应用程序未启动

    hot deploy ind 1

    指示器显示为灰色的轮廓。点击指示器将弹出带有启动应用程序选项的消息。

  2. 应用程序正在运行,无文件修改

    hot deploy ind 2

    指示器显示为绿色的轮廓。点击指示器将弹出文件未热部署的消息。

  3. 文件已修改,可以热部署:指示器变为实心的绿色。点击指示器将弹出可以热部署该文件的消息。

    hot deploy ind 3

    发起热部署之后,指示器保持实心的绿色,弹窗消息显示上次热部署的时间:

    hot deploy ind 4
  4. 热部署失败:指示器变红,表示热部署由于编译错误或其他原因失败。

    hot deploy ind 5