Поскольку каждый пакет OSGi имеет свой собственный загрузчик классов, во время выполнения будет 4 пакета, а также 4 загрузчика классов (A, B-1.0, B-2.0, C-1.0).
У вас может быть две копии одного и того же класса, включенные в B (одну от 1.0 и другую от 2.0). Если вы запустите это, вы можете просто столкнуться с ClassCastException в коде A, потому что две версии классов B не совпадают.
OSGi предоставляет условие «использования» для раннего обнаружения таких ситуаций. Например, C может иметь предложения использования вроде следующего:
Export-Package: c.some.package;uses="b.some.package";version="1.0"
Import-Package: b.some.package;version="2.0"
В этом случае у вас будет более ранняя ошибка (при разрешении A), известная как конфликт использования, поскольку C накладывает ограничение для своего потребителя на приемлемую версию B.
Концептуально, единственный способ решить эту проблему - заставить потребителей B (в данном случае A и C) согласовать версию B.