maven 多模块拆分导致循环依赖问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ChenGangS
V2EX    Java

maven 多模块拆分导致循环依赖问题

  •  
  •   ChenGangS Jul 12, 2022 3438 views
    This topic created in 1385 days ago, the information mentioned may be changed or developed.

    新人第一次提问,感谢各位大佬

    是我的一个练手项目,目前使用了 springBoot ,我拆分了一个系统模块,OA 模块
    系统模块包含了基本的后台管理和用户授权那块,同时还包含了 springboot 的启动类
    OA 模块包含了 OA 的审批功能等等。

    现在遇到的问题:

    系统模块中有一个用户服务,我在 OA 模块里需要用到它, 我就需要在 OA 模块中引入系统模块才能使用到这个服务
    而系统模块中必须引入 OA 模块以便被 spring 扫描,那么问题就来了,就发生了 A 需要 B ,B 需要 A 的循环依赖问题。

    我想到的解决方案:

    改造系统模块,拆分成多个 module ,分别单独暴露出 service 和 mapper 等类,让 OA 单独引用这个暴露的 service 模块而不需要引用整个系统模块

    1.我想知道这样做是否可行,会有其他坑嘛
    2.是否为主流的解决方案
    3.我想知道还有其他解决方案嘛

    谢谢啦!

    windyboy
        1
    windyboy  
       Jul 12, 2022
    关键字 exclude
    ChenGangS
        2
    ChenGangS  
    OP
       Jul 12, 2022
    @windyboy 排除不了的,因为系统模块必须引入 OA 模块才能加入到容器, 而 OA 模块又需要系统模块的一些服务, 这就导致两个模块互相需要
    windyboy
        3
    windyboy  
       Jul 12, 2022
    @ChenGangS 毛病在于你自己锁自己
    可以使用不依赖同一个版本,保持 API 的情况下,以来一个低版本可以绕过
    但问题还是来源于自身
    jamel
        4
    jamel  
       Jul 12, 2022   1
    把公用的提取出来,可以叫 api 、common 啥的。尽量少依赖于框架,尽量使用 spi 机制
    VeryZero
        5
    VeryZero  
       Jul 12, 2022   1
    感觉就不应该把 OA 和系统服务拆成多个 module 。如果 service 都要单独一个 module ,我个人感觉失去了多模块的意义。最终还是耦合在一起。

    获取把启动类单独拆成一个 module ,这样可以让启动类依赖 OA 和系统服务,但是 OA 和系统服务不互相依赖。
    jamel
        6
    jamel  
       Jul 12, 2022   1
    如果是 spring 的话可以使用 spring.factories
    carrie96
        7
    carrie96  
       Jul 12, 2022
    要不拆分成不同的服务?
    ChenGangS
        8
    ChenGangS  
    OP
       Jul 12, 2022
    @VeryZero 感谢,我按照你的方法把启动类拆成了单独的 module ,确实把启动类放在系统模块不太妥,因为我是参考开源项目 eladmin 的拆法,但我发现这个拆法后期新增模块都必须依赖这个系统模块,导致出现奇奇怪怪的问题。
    alvinbone88
        9
    alvinbone88  
       Jul 12, 2022   1
    要拆的话应该把各种 api 拆出来作为各模块的依赖,api 的实现则由单独的模块提供
    nothingistrue
        10
    nothingistrue  
       Jul 12, 2022   1
    简单得很(不简单),把 OA 依赖得用户授权也拆成独立模块。拆分从来都是业务拆分,不是物理位置拆分。你这个系统(含用户)、OA 的拆分导致业务双向依赖,是很不好的拆分。业务依赖方向应该是:应用程序,OA ,系统底层。其中只有应用程序是可启动的,后面的都是不可启动的库。
    hhjswf
        11
    hhjswf  
       Jul 12, 2022
    系统模块是基础模块,不应该去依赖上级模块呀
    ChenGangS
        12
    ChenGangS  
    OP
       Jul 12, 2022
    @hhjswf 是的,我一开始就是按照开源项目那样去拆,发现根本走不通,后面我按照楼上大佬的方式拆,可以了
    ChenGangS
        13
    ChenGangS  
    OP
       Jul 12, 2022
    @alvinbone88 感谢,这个方式也不错,后期改造成微服务会更加简单,get !
    About     Help     Advertise     Blog     API     FAQ     Solana     6186 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 70ms UTC 06:18 PVG 14:18 LAX 23:18 JFK 02:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86