Если вы можете загрузить класс (через Class.forName(), например), то можно воспользоваться методом getDeclaredMethod(), обернув вызов в try/catch и ловить NoSuchMethodException, в случае если искомый метод не найден. Этот функционал идет "из коробки" в JDK, никаких дополнительных библиотек не нужно.
NoClassDefFoundError говорит о том, что в момент исполнения кода класс не удалось найти в classpath приложения. Т.е. в момент компиляции он есть, а в момент выполнения недоступен. Посмотрите все-таки зависимости runtime и compile. Думаю если вы выложите свой "скелет" на Github и дадите народу ссылку, Вам быстро укажут на причину ошибки.
Да тут собственно ничего особенного не придумано. Конкретно в maven можно это разрулить профилями. Грубо говоря, профили позволят maven-у намекнуть, какой файл с настройками положить в сборку.