Spring Boot单体项目跨模块调用Repository时Maven编译报错求助
Spring Boot单体项目跨模块调用Repository时Maven编译报错求助
遇到这种IDE能正常识别类,但Maven编译却报找不到符号的情况,确实挺闹心的,我帮你梳理几个大概率的原因和对应的解决思路:
检查Admin模块的打包方式
如果你用了spring-boot-maven-plugin给Admin模块打包,那生成的是可执行Jar,这种Jar的类文件都放在BOOT-INF/classes目录下,普通Maven模块依赖时是无法直接读取到这些类的。解决办法有两个:- 把Admin模块改成普通的库模块:如果Admin模块不需要单独运行,就移除
spring-boot-starter-parent依赖,或者调整打包插件,用默认的maven-compiler-plugin生成普通Jar; - 配置Admin模块同时生成可执行Jar和普通Jar:在
spring-boot-maven-plugin里添加配置,让它额外生成一个供其他模块依赖的普通Jar,示例配置如下:
配置后,默认生成的Jar是普通依赖Jar,带<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin>-exec后缀的是可执行Jar,Core模块无需修改依赖配置即可正常引用。
- 把Admin模块改成普通的库模块:如果Admin模块不需要单独运行,就移除
确认CustomerRepository的可见性与路径正确性
- 检查Admin模块里的
CustomerRepository是否在com.TMS.repository包下,且位于src/main/java目录(不是测试目录); - 检查Core模块里的import语句是否完全正确,Java包名是大小写敏感的,IDE可能会自动补全但出现大小写错误,比如误写成
com.tms.repository(小写t),Maven编译会严格校验大小写。
- 检查Admin模块里的
验证Admin模块是否正确安装到本地仓库
先单独对Admin模块执行mvn clean install,确保它能正常编译打包,并且本地仓库(默认路径是~/.m2/repository/com/TMS/tms-admin/3.4.3/)里的Jar包确实包含CustomerRepository类。有时候如果之前Admin模块编译失败过,本地仓库里的Jar可能是旧版本,导致Core模块依赖时找不到新添加的类。检查是否存在依赖循环或模块配置问题
确认Admin模块没有反向依赖Core模块,这种循环依赖会导致Maven编译顺序混乱;另外,检查Core模块的pom.xml里,Admin模块的依赖是否放在正确位置,有没有被其他依赖规则意外排除的情况。
内容来源于stack exchange
相关产品推荐
相关产品推荐

