Пока все файлы .class находятся в вашем classpath (или в файлах .jar в вашем classpath), вам не нужно ничего делать, кроме:
Class<?> c = Class.forName(classname);
Конечно, для этого используется системный загрузчик классов по умолчанию (который управляется параметром jvm "java.class.path", т. Е. Аргумент "-cp" в исполняемом файле java).
Кроме того, вы можете использовать Context ClassLoader, как указано выше, или использовать тот же загрузчик классов, который загрузил какой-то другой определенный класс:
// within an instance method
Class<?> c = getClass().getClassLoader().loadClass(classname)
// within some other object (other than SomeClass), or a static method:
Class<?> c = SomeClass.class.getClassLoader().loadClass(classname);
В типичном приложении командной строки все 3 из них по существу будут одинаковыми, поскольку существует только системный загрузчик классов (если приложение явно не заменяет загрузчик классов). Однако в веб-приложении контейнер сервлета обычно предоставляет настраиваемые загрузчики классов для хранения отдельных путей к классам для каждого веб-приложения, поэтому существует разница в том, какой из них вы хотите вызывать (я не буду вдаваться в подробности здесь).
Если вызов одного из них не работает для вас, это означает, что класс, который вы пытаетесь загрузить, отсутствует в одной из записей вашего classpath, и, возможно, проблема в настройке IDE (возможно, вы не добавили проект проецировать путь к классу b) или настройку maven (вы не определили зависимость от проекта a в проекте b).