处理Maven多模块项目中的相互依赖性

问题描述

我正在经历Maven Framework。在进行多模块项目时,我读到模块之间的循环依赖性是不可接受的。 所以我想到了一个场景,就像...

   root ----------
    - pom.xml    |
                 |
                 |--- moduleA
                 |  - pom.xml (moduleB has been added as a dependancy)
                 |
                 |--- moduleB
                    - pom.xml
                    
                    

假设moduleA具有一个属性AppProperty一个Main类,该类将调用B中可用的另一个moduleB

Main类在moduleA中可用:-

someValue = AppProperty.get(propKey);

    //some logic
    
B mb = new B();
B.process(...);

BmoduleB类:-

process(...) {
someOtherValue = AppProperty.get(someKey)

    // some other logic
}

现在Main将不会抛出任何 compile-time errors ,因为其依赖性已得到解决,因为已将moduleB作为依赖性添加moduleA'a pom.xml中。但是对于类B而言,与其调用AppProperty类不同,后者仅在moduleA中可用。我无法在moduleA的pom中添加moduleB的依赖关系,因为这会导致循环依赖关系(如果我正确理解的话)。

我了解,理想情况下,建议以非循环方式维护代码,但是如果由于某种原因而消除循环依赖性只是不可行怎么办? 在这种情况下,有没有办法在不主动更改现有代码逻辑的情况下处理循环依赖关系?

解决方法

您不能构建具有循环依赖性的项目。您需要在A之前先在B之前先构建B,这是一个矛盾。

但是像您这样的问题很容易解决:

  • 如果问题仅是课程AppProperty或其他几个问题,只需将它们从A移到B。
  • 如果您对A和B有一些通用的类,请创建一个辅助模块C并将其用作A和B中的依赖项。
  • 如果A和B始终互相调用,则它们可能应该只是一个模块。因此,将它们合并到一个模块中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...