本地多模块依赖的相关问题

本地多模块依赖的相关问题

spring boot 版本2.3.7.RELEASE

jdk版本1.8

Maven 3.x

起因:今天本来想做一下本地模拟分布式模块调用,但是遇到了两个比较典型的问题
  1. 模块a引用模块b时,模块a中自动注入找不到模块b中的bean
  2. 模块a在打包时,找不到模块b对应的包

模块a具体配置:由springboot快速构建,打包方式为war

模块a目录结构

模块b配置:由springboot快速构建,打包方式为jar

模块b目录结构

具体流程为:我在模块b中编写了,UserService和UserServiceImpl,其中写了一个String hello();的方法

然后,我又在模块a中写了UserController 去调用模块b的hello();方法

如下:

第一个问题

1. 最开始,输入UserService时没有提示,就代表模块a中没有找不到这个类,所以需要到pom.xml中添加自己本地的模块依赖

这个名字可不能乱写,要与你模块b的pom.xml文件配置相应才行,或者你可以先在UserController里面把private UserService userService;拼写完,然后点一下红色的报错,再按alt+回车,选择idea的智能修复提示,就可以在模块a的pom.xml文件生成对应的依赖坐标

2. 导入依赖之后,就有提示了,说明idea找到了这个类,所以可以调用其中的hello方法了

3. 运行时则出现了,找不到该bean的异常

4. 有经验的程序员应该知道,spring boot报找不到bean基本上都是启动类所处的目录下,没有该bean,意思就是spring boot扫描不到这个类,自然初始化不了

  • 第一种解决方法

在模块a的启动类上使用这两个注解,basePackages当中写,你模块b中方法对应的包名

@SpringBootConfiguration
@ComponentScan(basePackages = {"com.drs"})

  • 第二种解决方法

由于我模块a和模块b两个的包名很相似,所以我可以直接移到启动类,以此来扩大包扫描范围

归根结底就是要扩大spring boot的包扫描范围,直到可以扫描到你需要的类

第二个问题是,关于本地模块打包

1.以上问题解决后,我还需要对模块a打war包

由于我是模块a引用了模块b,所以a打包之前,需要先对a进行install(Maven的指令)

然后再对a打包(package)

此时出现了打包错误,Maven提示找不到UserService类

解决办法就是把模块b的pom.xml文件中的spring boot自带的打包插件删掉

值得注意的是,每个被引用的模块都必须要要删除这个插件,才能把正确的jar包导入war

参考链接

34 springboot项目之间依赖导致bean 无法加载问题 - 走看看 (zoukankan.com)

Springboot mavne项目多模块打包,报错 找不到 base包,找不到common类等等-阿里云开发者社区 (aliyun.com)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值