项目场景:
问题背景:
①微服务、maven、Idea
②A工程的pom.xml
中引用了B工程
问题描述
服务启动报错:Annotation-specified bean name ‘redisConfig’ for bean class;原因是beanName
冲突。
原因分析:
尝试了很多方法,包括
自定义beanName:新建类
MyBeanNamegenerator implements BeanNameGenerator
,重写generateBeanName
方法,然后在启动类@ComponentScan
注解中配置属性nameGenerator = MyBeanNamegenerator.class
,未生效;
在
@Configuration
注解中定义value属性@Configuration(value = "xxxRedisConfig")
,结果此处不再报错,工程中其他被@Configuration
或@RestController
注解标注的地方报同样的错;
在
pom.xml
文件中依赖包的配置出增加<optional>true</optional>
,同样未生效;
解决方案:
最后发现,在服务启动,build
的时候有个Copying resources...
的动作,而且不光copy了本A工程的resources,还将pom.xml中引入的其他B工程的resources也copy了。后来试了一下A工程单独工作空间启动,build
时不再copy其他工程,服务启动成功。
由此可以推断是idea的问题,发现根目录下xxx.iml
文件中存在<orderEntry type="module" module-name="xxx-service" />
,在此删除或者在
File - Project Structure - Modules - Dependencies
中,找到依赖的类,右击remove,然后Apply。启动成功。
根本原因是maven-Download Sources
导致的。