问一个关于 Maven 循环依赖的问题

2019-05-21 15:58:02 +08:00
 binbinyouliiii

假设有:
系统 A插件 B。系统 A 定义了接口,插件实现接口功能。
但是出现了个依赖问题,因为插件 B是作为默认插件放入系统 A中的,所以 系统 A 依赖 插件 B。
插件 B 因为要有系统 A 的接口来规范,所以也需要依赖系统 A。

那么问题来了,这时候就会出现循环依赖问题,有什么解决办法吗?

2358 次点击
所在节点    Java
8 条回复
loongwang
2019-05-21 16:00:11 +08:00
依赖倒置原则
frienmo
2019-05-21 17:00:01 +08:00
所有 API 定义在 C 里,A 里面向接口 C 编程,B 实现接口 C。
插件设计模式的话我们用的是 google autoservice
palmers
2019-05-21 18:13:14 +08:00
我也觉得这时候应该拆分 A
binbinyouliiii
2019-05-21 19:04:05 +08:00
@frienmo
@palmers
我也想过拆分出来用 C 来实现,但是缺点是 1.我得把插件用到类全分出来,很多类是跟系统强耦合的,很麻烦。2.系统很多地方都需要使用可替换的“插件模式”,比如网络协议、序列化协议等,每个地方都得单独弄一个 C 模块,会显得比较乱。
所以想知道有什么更加优雅的方式。
mooncakejs
2019-05-21 19:10:34 +08:00
既然不想拆分,那就把 a 和 b 放一起。
palmers
2019-05-21 19:54:52 +08:00
1.“我得把插件用到类全分出来” 这个我觉得本来应该是一个协议或规范模块 独立的 没有任何依赖的
2. “很多类是跟系统强耦合的” 这个含义是 需要拆分出来的类是系统 A 强耦合的吗?那么 A 可以依赖拆分得到的独立模块来解决
3. ‘系统很多地方都需要使用可替换的“插件模式” ’ 这个也是这样 本来就应该将协议抽象

按照你现在需求和我的理解, 你面临的就是因为模块不够独立 很多需要细化的子模块放到了一个模块中, 所以出现了依赖问题 如果将现在的模块进行拆分 细化 耦合就解掉了 我也遇到过这种问题 一般这种问题都是因为业务的不断变更造成的
YzSama
2019-05-22 08:35:12 +08:00
抽插件 到顶层的 pom ?
wc951
2019-05-22 10:54:39 +08:00
依赖的 optional 设成 true

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/566244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX