Если 2 класса имеют одинаковое имя пакета, то есть com.mycompany.Client, то вы попадаете в ситуацию, когда несколько произвольно выбирается какая версия клиента загружена. Это сводится к тому, что находится на пути к классу первым. Это JAR адская ситуация http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell.
Это хорошая ситуация, которую следует избегать, но если вам абсолютно необходимы разные версии одного и того же класса, есть способы сделать это. Одним из способов является использование пользовательского загрузчика классов, и загрузчик классов будет знать, какую версию вам нужно сделать. Это не тривиальная вещь, и с ней может быть трудно справиться. Каркас OSGi является альтернативой, помогающей справиться с этим (он использует собственные загрузчики классов под капотом), но я бы не стал использовать это, если у вас есть только один экземпляр класса, поскольку это другой каркас, который требует времени и обслуживания.
Итог: избегайте ситуации, если можете, и выбирайте путь наименьшего сопротивления, если не можете.
Если классы имеют разные имена пакетов, @Casidiablo предоставил хороший ответ.