如何解决Spring Boot微服务Maven Install报错:cannot find symbol?
问题描述
我开发了负责用户认证与授权的Spring Boot微服务,目前需将这些微服务容器化,因此需要每个微服务生成包含Jar包的target目录。在IDE中执行Maven Clean及Maven Install操作时,除identity-service外其余微服务均正常运行。
identity-service依赖负责RabbitMQ配置及消息发送的amqp微服务,使用其中的RabbitMQMessageProducer类发送消息,其pom.xml中已添加如下依赖:
<dependency> <groupId>com.tradebit</groupId> <artifactId>amqp</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
运行时identity-service可正常与amqp交互、发送消息,无任何错误,但执行Maven Install时出现「cannot find symbol」错误,疑似无法识别amqp依赖。已尝试重新导入依赖、多次对amqp及identity-service执行Clean Install操作,问题仍未解决。
解决方案
验证amqp模块是否正确安装到本地Maven仓库
前往本地Maven仓库默认路径~/.m2/repository/com/tradebit/amqp/0.0.1-SNAPSHOT,查看是否存在对应的jar包与pom文件。若缺失,在amqp模块根目录执行mvn clean install -DskipTests,确保模块被正确安装到本地仓库。检查identity-service的依赖范围
确认amqp依赖未设置provided或test等特殊scope,默认的compile范围才会在打包阶段引入依赖。排查多模块项目的构建顺序(若为多模块结构)
如果是多模块Maven项目,需从父模块根目录执行mvn clean install,确保amqp模块先于identity-service完成构建;同时检查父pom.xml是否正确包含amqp模块,identity-service的pom是否继承了父pom。清除Maven本地仓库的快照缓存
删除~/.m2/repository/com/tradebit/amqp整个目录,重新执行amqp模块的install操作,再运行identity-service的install,避免快照版本依赖的缓存冲突。确认IDE与命令行的Maven仓库路径一致
执行命令mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout获取命令行使用的仓库路径,对比IDE的Maven设置中的本地仓库路径,确保两者一致,避免依赖安装位置不匹配。检查amqp模块的打包方式
确认amqp模块的pom.xml中<packaging>配置为jar(默认值),若设置为pom则不会生成可依赖的jar包。
内容的提问来源于stack exchange,提问作者Bohdan Kyryliuk

