Vaadin 14应用打包为JAR后静态资源无法加载
Vaadin Flow 14 + Spring Boot 打包JAR后图片/字体不显示问题排查方案
检查资源存放路径与打包规则
Vaadin Flow 14要求静态资源(图片、字体等)必须放在src/main/resources/META-INF/resources目录下,才能在生产打包后被正确识别。先确认你的资源是否在这个路径下。同时检查pom.xml里的maven-resources-plugin配置,有没有误加<exclude>规则过滤掉.png、.woff、.woff2这类资源后缀。验证资源访问方式
- 后端Java代码里引用资源时,别用本地文件系统路径(打包成JAR后本地路径失效),改用
VaadinServlet.getCurrent().getServletContext().getResourceAsStream()或者Spring的@Resource注解来加载资源。 - 前端(HTML模板、CSS)里的资源引用要用相对路径,比如
./fonts/roboto.woff2,避免绝对路径,确保和打包后的资源结构匹配。
- 后端Java代码里引用资源时,别用本地文件系统路径(打包成JAR后本地路径失效),改用
检查打包后的JAR内容
执行mvn clean package -Pproduction后,把生成的JAR解压,查看BOOT-INF/classes/META-INF/resources目录下有没有你的图片和字体文件。如果缺失,说明打包时资源没被正确复制,需要调整maven资源复制规则;如果文件存在但访问不了,试试清除浏览器缓存再测试(生产模式下Vaadin会给资源加哈希缓存,可能旧缓存导致加载失败)。排查Java代码修改的间接影响
虽然你只改了Java类的函数,但要确认有没有间接修改到资源加载相关逻辑:比如是否自定义了VaadinServlet配置、添加了资源处理器Bean,或者新增了权限拦截器误拦截了图片/字体的请求(CSS能正常访问,说明拦截规则可能只漏过了CSS后缀)。
内容的提问来源于stack exchange,提问作者MrRene
相关产品推荐
相关产品推荐

