Поздравляем, вы столкнулись с проблемой пути к классам, которая называется "jar hell". Единственное безопасное решение, которое я знаю, - это использование разных загрузчиков классов для каждой версии одного и того же класса (если он не имеет обратной совместимости).
Класс идентифицируется по его полному имени (пакет и имя класса) и по загрузчику классов, который был загружен. Если приложение использует системный загрузчик классов по умолчанию, и в пути к классам имеется один и тот же класс в разных версиях, загрузчик классов будет загружать только одну версию. В оракуле JDK / JRE это тот, который появился первым в пути к классам. Если вам повезет, вы можете привести путь к классам (порядок и исключая зависимости) в особом порядке, в котором будет работать ваше приложение, но я бы не рекомендовал его, поскольку оно сильно зависит от реализации JDK / JRE.
OSGI - это технология, которая может быть полезна для этого, поскольку она предоставляет основанную на модуле инфраструктуру для использования различных загрузчиков классов.