Maven模块间循环依赖的解决方案以及分析

Maven模块间循环依赖的解决方案以及分析

问题重现

在coding中Maven各个模块之间经常会有互相引用的问题,当A模块中需要用B模块的功能,而B模块很有可能也需要用到A模块中的功能,这样就会存在A模块中引入了B,而B模块又引用了A,项目启动时maven就会报错

在这里插入图片描述

报错原因分析

因为Maven结构是自下而上的,被依赖的包将会提前于使用其的包被maven打包,因此A引用了B,B引用了A,Maven不知道要将哪个包提前打包,就会报错。

具体分析

与其说是Maven循环依赖的问题,更不如说是项目结构存在问题,庞大如Spring都不存在循环依赖的问题,为什么我们自己的项目会存在这种低级错误呢,归根结底是因为对于IOC控制反转理念的理解不够到位,或者说对于IOC解决的问题以及优点理解不全面,IOC相信大家都耳熟能详,控制反转,我认为控制反转最精妙的就是将传统思维中的依赖于某个具体实现 改变为 依赖于其抽象,回想我们所使用的各种Map,各种List,是否都是

List a = new ArrayList<>(); 
Map b = new HashMap<>();

这无一不都是IOC控制反转的体现

解决方案

综上就可以很好的解决Maven循环依赖的问题
在这里插入图片描述

将接口与实现impl分模块处理,A impl模块依赖B模块的接口抽象模块,B impl模块依赖A模块的接口抽象模块,将具体实现交由spring处理,同时,entity、vo、dto等实体类应在接口模块中,如下图所示
在这里插入图片描述

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
循环依赖是指在Maven项目中,两个或多个模块相互依赖,形成一个闭环的依赖关系。这种情况下,Maven无法确定应该先构建哪个模块,因此会报错。 解决循环依赖问题有几种方案: 方案一是单依赖。可以删除其中一个模块对另一个模块的依赖,将依赖的业务迁移到另一个模块中。例如,在sso工程中删除对master-data工程的依赖,将依赖的业务迁移到sso工程中,或者在master-data工程中删除对sso工程的依赖,将依赖的部分迁移到master-data工程中。 方案二是使用插件build-helper-maven-plugin。可以添加一个中模块,让两个模块都依赖于中模块,而不直接相互依赖。这样可以规避循环依赖问题,但本质上循环依赖仍然存在。 另外,还有一种解决循环依赖的方法是修改pom.xml文件中的依赖。可以将循环依赖模块的依赖范围(scope)修改为system,并指定systemPath为模块的jar包路径。这样可以解决循环依赖问题,但需要手动将依赖的jar包放置在指定路径下。 总结来说,解决Maven循环依赖问题的方法包括单依赖、使用插件build-helper-maven-plugin和修改依赖的范围和路径。具体选择哪种方法取决于项目的具体情况和需求。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [maven 循环依赖处理办法](https://blog.csdn.net/rootcn/article/details/99694157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [解决maven循环依赖](https://blog.csdn.net/liouwb/article/details/123651961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值