Spring Boot引入其他Spring Boot jar无法导入类的问题
问题原因
Spring Boot 项目默认通过spring-boot-maven-plugin打包生成的是可执行 fat jar,这类jar会把项目自身编译出来的类统一放在BOOT-INF/classes目录下,第三方依赖放在BOOT-INF/lib目录下,不符合Maven常规依赖jar的路径结构。因此即使你把search-engine的jar安装到本地仓库,post-engine引入依赖后也无法识别到jar内的类,自然无法完成导入。
修复步骤
- 修改search-engine项目pom.xml中的spring-boot-maven-plugin配置,增加
<classifier>exec</classifier>配置项,让Maven打包时同时生成两个jar包:- 带exec分类的fat jar:用于单独启动search-engine服务
- 无分类的普通jar:符合Maven依赖规范,存放项目所有编译后的类,供其他项目作为依赖引入
具体配置如下:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> <!-- 新增该行配置 --> <classifier>exec</classifier> </configuration> </plugin>
- 重新在search-engine项目根目录执行
mvn clean install,将新生成的普通jar安装到本地Maven仓库 - 回到post-engine项目刷新Maven依赖,即可正常导入search-engine中的类。
补充注意:如果需要在post-engine中注入search-engine里定义的Spring Bean,需要在post-engine的启动类上配置包扫描范围,覆盖search-engine的包路径,例如
@SpringBootApplication(scanBasePackages = "com.askvedicastrologers"),否则会出现Bean找不到的注入错误。
内容的提问来源于stack exchange,提问作者Rajesh Lohith
相关产品推荐
相关产品推荐

