前言
近期搭建自己的手脚架项目时,control引用其它模块中的service时,启动时启动不起来,报
Field loginService in com.*.SysLoginController required a bean of type 'com.haixin.*.SysLoginService' that could not be found.
maven多模块之间引用 启动报could not be found问题原因,解决方案,原理
1 具体问题
如图在多模块之间,
其中已经在admin模块的pom中正确引入了framework
2 问题原因
- 模块之间的引用问题(我遇到的不是)
具体就是排查多模块之间的pom文件引入关系。看看是否引入了,是否循环依赖了等。 - 启动类位置错误
我新建的这个项目,启动类就放在了com/haixin/initadmin
路径下
但是我的init-framework中的代码路径是com/haixin/initframework
这就导致了引用不到问题
3 解决方案
- 将启动类移动到上级目录
package com.haixin;
- (如果第一种方式场景不允许)在启动类上添加扫描路径
//@ComponentScan(basePackages = {"com.haixin.initadmin.**", "com.haixin.initframework.**", "com.haixin.initcommon.**"})
4 原理分析
springboot启动类扫描当前包及其子包扫描
因为最开始的启动类放在了com/haixin/initadmin
路径下,那么扫描的包就是initadmin包及其子包。
其它模块的都是在com/haixin/xxx
路径下,所以扫描不到。
所以可以通过移动启动类的位置到公共的包路径下。
如果场景不允许,还可以通过第二种方式,在启动类上手动添加自定义扫描的包路径