Spring Boot多模块项目Vaadin路由无法定位问题咨询
我刚踩过类似的多模块拆分坑,帮你一步步捋清楚问题:
核心问题分析
你碰到的Couldn't find route for ''错误,本质是Spring没有扫描到Vaadin的@Route视图类,主要有两个关键诱因:
1. 依赖Scope配置错误
你的Boot模块对app_frontend的依赖用了<scope>runtime</scope>,这个scope意味着该模块的类只会在运行时被加载,但Spring的组件扫描(包括Vaadin路由注册)是在应用启动阶段执行的,此时runtime scope的类还未被加载,自然找不到你的MainView。
2. 组件扫描范围的潜在遗漏
虽然你加了@ComponentScan(basePackages = {"my.app"}),但需要确认app_frontend模块里的Vaadin视图类确实在my.app或其子包下,否则Spring还是扫不到对应的路由类。
具体解决方案
第一步:修正依赖Scope
把Boot模块pom里的依赖scope从runtime改成compile(默认就是compile,也可以直接删掉scope标签):
<dependency> <groupId>${project.groupId}</groupId> <artifactId>app_frontend</artifactId> <version>${project.version}</version> <scope>compile</scope> <!-- 替换原来的runtime --> </dependency>
这样Boot模块在编译和启动阶段都能访问到app_frontend的类,Spring就能扫描到带@Route的MainView了。
第二步:确认组件扫描范围
检查app_frontend模块的MainView所在包,比如如果它在my.app.frontend.view下,你的@ComponentScan(basePackages = {"my.app"})已经覆盖了这个路径,没问题;如果包不在my.app下,需要把对应的包路径加到basePackages里,比如:
@ComponentScan(basePackages = {"my.app", "com.another.package"})
第三步:验证路由注册
启动项目后,查看控制台日志,找类似这样的日志:
Registered route for 'MainView' with parent routes ''
如果能看到这条日志,说明Vaadin已经成功注册了路由,访问localhost:8080(或者你配置的端口)就能正常看到视图了。
内容的提问来源于stack exchange,提问作者user3252485

