I'm been going through the Maven Framework
. While going through multi-module projects, I read that cyclic dependency is not acceptable among the modules.
So I thought of a scenario, something like...
root ----------
- pom.xml |
|
|--- moduleA
| - pom.xml (moduleB has been added as a dependancy)
|
|--- moduleB
- pom.xml
Assume that moduleA
has a property class AppProperty
and a Main
class which invokes another class B
available in moduleB
Main
class available in moduleA
:-
someValue = AppProperty.get(propKey);
//some logic
B mb = new B();
B.process(...);
Class B
of moduleB
:-
process(...) {
someOtherValue = AppProperty.get(someKey)
// some other logic
}
Now Main
will not throw any compile-time errors
as its dependancies have been resolved because moduleB
has been added as a dependancy in moduleA'a pom.xml
. But for class B
that is not the case as its invoking AppProperty
class which is available in moduleA
only. I cannot add moduleA
's dependancy in moduleB
's pom as that would lead to cyclic dependancy (if I understand it correctly).
I understand that ideally it is advised to maintain codes in an acyclic manner, but what if because of some reason removing cyclic dependancy is just not feasible? In such a scenario, is there any way to handle cyclic dependancies without actively changing the existing code logic?