迁移AuthorizationService相关类至Core模块后IntelliJ编译报错求助
先说说我的场景:之前AuthorizationServiceImpl作为Spring Bean放在web模块的security包下,运行正常。最近把AuthorizationService接口和它的实现类都迁移到了core模块,但IntelliJ编译时直接报错了。我整理了几个大概率能解决问题的排查方向:
先确认模块依赖是否配置正确
不管你用的是Maven还是Gradle,一定要确保web模块已经添加了core模块的依赖。比如Maven要在web模块的pom.xml里加上core模块的依赖节点,Gradle则要写implementation project(':core')。要是没加这个依赖,web模块根本找不到core里的类,编译报错是必然的。检查Spring的组件扫描范围
原来的Impl类在web模块时,Spring默认扫描web模块的包,但现在移到core模块了,得让Spring能扫到core里的组件。可以在web模块的启动类或者Security配置类上加上@ComponentScan,指定core模块的包路径,比如:@SpringBootApplication @ComponentScan(basePackages = {"com.core.security", "com.web"}) public class WebApplication { public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } }这样Spring才能把core里的
AuthorizationServiceImpl注册成Bean。核对类上的Spring注解
迁移的时候别不小心把AuthorizationServiceImpl上的@Service或者@Component注解删掉了!没有这个注解,就算Spring扫到了这个类,也不会把它当成Bean来管理,后面注入的时候肯定会报错。清理IntelliJ的缓存
IDE缓存有时候会“抽风”,明明配置都改对了,它还抱着旧的配置不放。试试点击顶部菜单栏的File -> Invalidate Caches...,选择Invalidate and Restart,重启后让IDE重新加载整个项目,很多莫名其妙的编译错误都能这么解决。检查导入路径是否更新
迁移后类的包名肯定变了,要确保所有注入AuthorizationService的地方,import的都是core模块里的新路径,别还引用着web模块里的旧包路径。比如原来的import com.web.web.security.service.AuthorizationService要改成import com.core.security.service.AuthorizationService。
内容的提问来源于stack exchange,提问作者JONKI

