Похоже, что ваша команда выполняет ручной контроль качества, и реальная проблема заключается в автоматизации регрессионных тестов, чтобы вы могли быстро и уверенно развертывать новые выпуски. Для этого нужно разбить код на отдельные серверы.
Если вы хотите перезапустить сервер, то одним из подходов может быть скомпилировать код в отдельные файлы JAR и развернуть модуль, вставив новый JAR и перезапустив. Это в основном вопрос структурирования базы кода, чтобы не возникали плохие зависимости, а вызовы между jar-файлами выполняются через неизменяемые интерфейсы. (Или альтернативно, используйте абстрактные классы, чтобы вы могли добавить новый метод с реализацией по умолчанию.) Ваша система сборки может помочь, убедившись, что отдельно развернутые модули могут зависеть только от общих интерфейсов, а все остальное является ошибкой компиляции. Но обратите внимание, что ваш компилятор не поможет вам обнаружить несовместимости, когда вы меняете файлы jar, с которыми вы не компилировали, поэтому я не уверен, что это действительно позволяет избежать хорошего процесса QA.
Если вы хотите развернуть новый код без перезапуска JVM, то OSGI является стандартным способом сделать это. (Но о котором я мало знаю.)