Gradle|Maven多模块开发解决循环依赖

本文介绍了如何在不拆分模块的情况下解决Gradle多模块项目中的循环依赖问题。通过创建公共模块定义接口,并在各模块实现接口,实现了编译时类型检查和运行时的依赖注入,确保了系统的正常运行。这种方法避免了频繁调整模块结构,提升了代码的可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提纪要

  • 公司目前是gradle多模块开发 没有用到传统互联网公司的分布式 springCloud、dubbo等
  • 差不多是20个jar包 一个底座war 依赖所有jar包
  • 有公共模块framework、core等

问题出现

  • 前面说过是多模块开发 其中有两个模块比较特殊
  • 一个是 定时调度暂且称为T、一个是数据抽取Etl 暂且称为E
  • 目前的业务要求是T需要调用E中的运行方法、E需要获取T中的定时运行状态以及记录
  • 按照分布式的解决方法很简单就利用Rpc相互调用方法就行了 也不存在直接依赖关系
    如图
    请添加图片描述

解决思路

  • 在gradle中 依赖关系是配置在 build.gradle 中的 如果相互依赖 在打包过程中会报错 也就是所谓的循环依赖
  • 查询了很多方案 大部分人的解决方法是将冲突的业务拆出来单独依赖 但是并不能解决复杂的问题
  • 所以我们取巧一下
首先解决编译问题

对于Java以及Spring而言 编译只要有类型即可 不需要有具体对象 也就是多态中常说的编译看左边 运行看右边
所以 我们新起一个公共模块common 里面定义类型 (Interface) 这时候就解决了编译的问题 所有需要调用其他模块的
方法都写在这里 这样就不会有循环依赖

下面解决运行问题

光有类型是不够的 还需要有具体业务逻辑 以及运行的方法体 所以我们在各自模块 创建实现类impl 这样打包之后
所有的 class 都在底座war中 Spring可以为我们找到 并没有依赖关系的实现类并自动注入

如图

请添加图片描述

这样即使以后再出现依赖冲突 也不用再次拆包 只需要写在common中就可以啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值