解决Maven工程循环依赖的问题

背景:

      最近在做下载模板,目前思路是通过调用考评服务的接口来下载,结果出现了循环依赖的问题。

探究:

      Maven的循环依赖或者双向依赖。下图描述了相互依赖的场景:
解决Maven工程循环依赖的问题_第1张图片

      图​中​模​块​C依​赖​于​模​块​B,模​块​B依​赖​于​模​块​A,而​模​块​A又​依​赖​于​模​块​C,这​样​就​出​现​了​相​互​依​赖​情​况​,如​果​运​行​mvn compile会​出​现​错误:
这里写图片描述
      我们采用build-helper-maven-plugin解​决​相​互​依​赖​的​问​题。​先​把​相​互​依​赖​的​模​块​整​合​在​一​起​,相​当​于​把​这​些​模​块​合​并​成​一​个​单​独​的​模​块​统​一​编​译​, 如​下​图​:合​并​A、​B、​C三​个​模​块​为​D模​块​。
解决Maven工程循环依赖的问题_第2张图片
      这个模块D相当于我们工程里的父工程parent。我​们​把​它​当​做​一​个​辅​助​构​建​模​块​,然​后​让​A、​B、​C模​块​都​依​赖​于​D模​块​,这​样​的​话​就​可​以​成​功​编​译​A、​B和​C模​块​,如​下​图​: 基​于​D模​块​来​分​别​编​译​A、​B、​C三​个​模​块​:
解决Maven工程循环依赖的问题_第3张图片

循环依赖

      循环依赖呢,就是模块A依赖模块B,模块B依赖模块A,形成循环依赖。或者模块A依赖模块B,模块B依赖模块C,模块C依赖模块A。

      如果循环依赖发生在工程之间,则会影响构建,因为maven不知道应该先编译哪个工程。如果循环依赖发生在同一个工程的模块之间,虽然不影响编译,但是也是一种不好的实践,说明模块的设计有问题,应该避免。

怎么解决循环依赖?

      1、build-helper-maven-plugin插件解决
      2、重构

如何重构?

      1、平移。模块A的代码平移到模块B
      2、下移。模块A和模块B相互依赖,同时都依赖模块C,可以将A和B相同的代码移到模块C,这样A和B都依赖C。

我们这个问题是怎么解决的?

      下载模板的循环依赖问题,我们通过重构的平移解决,这个接口用到的表是考评服务的,所以我们通过mysql的表映射,将我们需要的表映射到教务服务,这样我们可以在教务服务中写同样的接口,相当于将考评的代码平移到了教务。

表映射分享链接:

MySQL开启federated引擎实现数据库表映射

总结:

      有关maven的依赖管理,我们可以排除依赖,归类依赖,优化依赖,下篇博客再见!

你可能感兴趣的:(【javaweb】)