How to resolve cyclic dependency in Maven?

后端 未结 3 1773
余生分开走
余生分开走 2020-11-27 16:07

How can we resolve a Maven cyclic dependency?

Suppose A is the parent project and B and C are child projects. If B is dependent on C and C is dependent on B, is ther

相关标签:
3条回答
  • 2020-11-27 16:32

    Creating a new project is indeed one solution.

    Dependency Inversion is the second possible solution.

    Refer to here for the Acyclic Dependency Principle.

    And here for the Dependency Inversion Principle.

    0 讨论(0)
  • 2020-11-27 16:35

    Maven does not allow cyclic dependencies between projects, because otherwise it is not clear which project to build first. So you need to get rid of this cycle. One solution is the one you already mentioned, to create another project. Another one would be to just move some classes from B to C or vice versa when this helps. Or sometimes it is correct to merge project B and C to one project if there is no need to have two of them.

    But without knowing and analyzing why your projects depend on each other it's kinda difficult to suggest the best solution.

    So I suggest you can use tools like JDepend or the InteliJ analyse tool to find your problematic classes and based on them find a better design for your software.

    Most of the time, I create something like an interface module and and implementation module, which gets rid of most cycles. Check out the answer from Dormouse in this thread and search for Dependency Inversion Principle to get more sources on this topic.

    0 讨论(0)
  • 2020-11-27 16:37

    I will introduce the way how I fixed those issues of circular dependencies.

    I have two modules that includes each other. I removed dependencies on each side and setup RabbitMQ messaging system and create direct exchange. So when I need something from module1 I send message to RabbitMQ and get response and process data from module2. I think this is the better way of integrating components and it's loose integration.

    0 讨论(0)
提交回复
热议问题