【解决问题】maven<optional>设置为true,导致无法找到注入的bean

最近同事在公共组件写的一个邮件发送功能,别人在使用的时候,一直有问题

问题:

启动服务程序一直报错JavaMailSender没有注入

排查:

  1. 查看是否写组件注入注解,没有问题

  1. 层级调用组件注入注解,也没有问题

但是还是一直报错JavaMailSender没有注入,奇怪了

调查下,业务是咋使用的:

下来测试下公共组件:

启动公共组件,看看JavaMailSender的bean是否存在

测试是ok

那么问题就是服务a没有引用过去,为啥没有引过去呢?

那必须得看下pom文件了

看见pom里面配置<optional>为true,真是太坑了

<optional>意思:

true表示两个项目之间依赖不传递;不设置optional或者optional是false,表示传递依赖

结论:

  1. 去掉<optional>true</optional>或者设置成false

  1. 服务a重新引用下spring-boot-starter-mail依赖

注意附官网文档地址:

Maven – Optional Dependencies and Dependency Exclusions

官网说明:

Project-A -> Project-B

The diagram above says that Project-A depends on Project-B. When A declares B as an optional dependency in its POM, this relationship remains unchanged. It's just like a normal build where Project-B will be added in Project-A's classpath.

Project-X -> Project-A

When another project (Project-X) declares Project-A as a dependency in its POM, the optional nature of the dependency takes effect. Project-B is not included in the classpath of Project-X. You need to declare it directly in the POM of Project X for B to be included in X's classpath.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值