Возможность решения этой проблемы зависит от типа зависимостей, которые у вас есть. Если они являются прямыми зависимостями времени компиляции, то у вас большая проблема, и вам, возможно, придется сделать редизайн.
OSGi может помочь, но только если зависимости находятся во время выполнения и доступны через интерфейсы как службы OSGi. Таким образом, каждый используемый сервис создается с использованием своих собственных определенных зависимостей (и версий) и предоставляется пользователю только через интерфейс. Потребитель будет зависеть только от этого интерфейса. Таким образом, в вашем случае, если у вас есть только ссылки на классы в B и C, которые не имеют прямых ссылок на D, вы сможете использовать OSGi.
С другой стороны, если вы ссылаетесь на классы из B и C, которые имеют прямые ссылки на классы из D, это не решит вашу проблему, так как ваш модуль будет вынужден импортировать пакеты с соответствующими версиями, и ваш конфликт все еще будет существовать .