从 Lumo 迁移到 Aura

Jmix 3 使用 Aura 作为新项目的默认主题,并继续支持 Lumo。升级 Jmix 2 应用程序后,可以保留 Lumo 或迁移到 Aura。

最简单的迁移方式是使用一个新的 Jmix 3 Aura 项目作为参考。其中生成的文件提供了标准视图的正确主题结构和样式。

创建参考项目

创建一个空白项目,使用与升级后应用程序相同的 Jmix 版本。选择 Aura 作为主题。

在迁移期间保持此项目打开。需要复制其中的主题文件,并将标准视图 XML 与应用程序中的 XML 进行比较。

复制 Aura 主题

将参考项目中生成的 Aura 主题目录复制到升级后的项目:

src/main/resources/META-INF/resources/themes/<reference-project>-aura

将复制的目录重命名为 <application-name>-aura。其中:

  • 将 <reference-project>.css 重命名为 <application-name>.css。

  • 更新 styles.css 中的最后一个导入,使用新的文件名。

生成的目录应如下所示:

src/main/resources/META-INF/resources/themes/<application-name>-aura
├── <application-name>.css
├── styles.css
└── view
    ├── login-view.css
    ├── main-view-top-menu.css
    └── main-view.css

在迁移完成之前,保持旧的 Lumo 主题不变作为参考。不要将其生成的视图样式复制覆盖到 Aura 文件上。

启用 Aura

在应用程序主类中,移除 @Theme 注解以及 Lumo 相关的导入或样式表注解。

添加以下导入:

import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.theme.aura.Aura;
import io.jmix.flowui.theme.aura.JmixAura;

按以下顺序添加 Aura 样式注解:

@StyleSheet(Aura.STYLESHEET)
@StyleSheet(JmixAura.STYLESHEET)
@StyleSheet("themes/<application-name>-aura/styles.css")

更新标准视图

将应用程序的主视图和登录视图 XML 与参考项目中对应的 XML 进行比较。复制缺失的主题相关类名,同时保留应用程序中自定义的内容。

例如,生成的主视图在 appLayout 设置了 jmix-main-view-app-layout;在 initialLayout 设置了 jmix-initial-layout。

较旧的主视图可能使用 Lumo 工具类来定位 userMenu:

<userMenu id="userMenu"
          themeNames="tertiary"
          classNames="ms-auto me-m">

将其替换为生成的 Aura 主视图样式所使用的 css 类:

<userMenu id="userMenu"
          themeNames="tertiary"
          classNames="jmix-main-view-user-menu">

迁移自定义样式

将自定义的 CSS 从旧主题移动到 <application-name>.css。同时需要复制这些样式使用的图像、字体和其他资源。将这些 CSS 的导入保持在 styles.css 文件的最后,以便可以覆盖生成的视图样式。

检查迁移后的代码中以下 Lumo 特定功能:

Lumo 工具类

Aura 不包含 Lumo 工具类。将 LumoUtility 常量和 Lumo 工具类名替换为组件 API、自定义 CSS 类或 io.jmix.flowui.theme.StyleUtility 中的合适常量。

CSS 自定义属性

根据用途替换 --lumo-* 属性。并非每个 Lumo 属性都有直接替代。尽可能使用通用的 --vaadin-* 属性,在主题特定范围内的设置则使用 Aura 属性。

自定义项 Aura 属性

强调色(Accent color)

--aura-accent-color-light 和 --aura-accent-color-dark

应用程序背景

--aura-background-color-light 和 --aura-background-color-dark

字体和大小

--aura-font-family 和 --aura-base-font-size

边框圆角

--aura-base-radius

组件密度

--aura-base-size

请参阅 Aura 主题参考 获取完整的属性列表。

组件自定义

检查带有 LUMO_ 前缀的主题样式和 Java 常量。将规则从旧的 components 目录移动到应用样式表中,因为 Vaadin 25 默认不再注入这些规则。请参见 UI 组件的样式。

浅色和深色样式

将自定义颜色替换为 Aura 颜色属性或 CSS light-dark() 函数。像 html[theme~='dark'] 这样的选择器不覆盖 LIGHT_DARK 和 DARK_LIGHT 系统模式。请参见 编写颜色方案感知的 CSS。

重新构建和测试

在重新构建前端包之前删除生成的文件:

./gradlew clean vaadinClean

在开发模式下启动应用程序。检查登录视图、主视图和自定义组件。如果应用支持两种颜色方案,请测试浅色和深色模式。

对于 JAR 部署,测试生产构建:

./gradlew -Pvaadin.productionMode=true bootJar

验证应用样式表及其资源在打包后的应用中已加载。

移除旧主题

在应用于开发和生产模式下正常工作后,删除旧的 Lumo 主题目录。