Vaadin Hilla依赖项目中@BrowserCallable未生成前端代码求助
解决多模块Vaadin项目中@BrowserCallable服务前端代码生成问题
针对多模块Spring+Vaadin项目里,依赖子项目中的@BrowserCallable服务无法在主项目执行vaadin:generate时生成前端代码的问题,以下是具体排查和解决思路:
确保依赖模块先构建并正确引入
执行vaadin:generate前,必须保证子项目B已完成编译打包并被主项目A正确依赖:- 先单独构建子项目B:
mvn -pl B clean install - 检查主项目A的pom.xml中,对B的依赖范围是否为compile(默认即为compile,避免设置为
provided/test等会排除在classpath外的范围)
- 先单独构建子项目B:
校验package.properties配置的正确性
子项目B中的META-INF/VAADIN/package.properties需满足:- 文件必须被正确打包到B的jar包中:执行
mvn package后,打开B的jar,确认META-INF/VAADIN/package.properties存在 - 文件内容格式为
packages=你的包路径,使用点分隔符而非斜杠,例如packages=my.package.service,多包用逗号分隔 - 确保主项目A的classpath能读取到该文件:通过IDE查看A的依赖库中,B的jar里是否包含此文件
- 文件必须被正确打包到B的jar包中:执行
修正vaadin.allowed-packages配置
主项目A的application.properties中:- 配置值必须包含子项目B中
@BrowserCallable服务所在的完整包路径,支持通配符,例如vaadin.allowed-packages=my.package,my.package.* - 确认配置键匹配你的Vaadin版本:Vaadin 24+使用
vaadin.allowed-packages,旧版本可能需要vaadin.frontend.allowed-packages
- 配置值必须包含子项目B中
检查Vaadin Maven插件的配置
主项目A的pom.xml中,vaadin-maven-plugin需确保扫描依赖中的类:- 确保插件版本与Vaadin框架版本一致,JDK21建议搭配Vaadin 24.3+版本,避免版本不兼容
- 可尝试显式配置插件的扫描范围,例如:
<plugin> <groupId>com.vaadin</groupId> <artifactId>vaadin-maven-plugin</artifactId> <version>${vaadin.version}</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <!-- 显式指定要扫描的包,包含子项目B的包 --> <packages>my.package,my.package.service</packages> </configuration> </plugin>
排查JDK版本兼容性
Vaadin 24.3+官方明确支持JDK21,若使用较旧的Vaadin版本(如24.0-24.2)可能存在兼容性问题:- 升级Vaadin框架及插件到最新稳定版(24.3.x及以上)
- 确认项目中其他依赖(如Spring Boot)也支持JDK21(Spring Boot 3.2+支持JDK21)
确认@BrowserCallable服务的类定义
确保子项目B中的服务类满足:- 无编译错误,class文件存在于B的jar中
- 正确导入
com.vaadin.flow.component.UI.BrowserCallable注解并标注 - 类为public访问权限,避免包私有导致无法被扫描到
内容的提问来源于stack exchange,提问作者FatalCatharsis
相关产品推荐
相关产品推荐

