1.现象
本地编译不报错,然后打包,部署到容器中。容器运行报错。错误日志是:
某一个bean.没有注入成功。而且打包几次不同,报的注入类错误也不同。
rg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'macPoolController': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zhqc.cloud.frame.sso.admin.api.oauth.IMacPoolService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2.然后我就在本地打包,以及运行发现均没有错误。
尝试了各种操作,比如以为有多个jar包冲突、或者maven仓库问题(删除本地仓库,重新编译),以及idea的缓存问题(idea invalid Cache)但是都没有解决。然后去检查编译的时候,发现一个service打包方式为jar包。当时想了下这个不应该打包成jar包,毕竟没有主运行类,也不提供服务,应该是pom包。然后也去掉了下面的打包插件。最终问题解决
2 原因:
a.引入了spring-boot-maven-plugin 插件,在一个不需要打成jar的service模块。
<build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
b.service 模块打包方式为jar包,去掉该打包方式
3.结论
这个问题处理了接近一天。问题最后得到解决。因此,在pom引入包时,要格外小心,不要随便将模块打包方式改成jar包。更不要随意引入无关的插件。