Я думаю, что ваш единственный выбор (если не считать избиения автора мокрыми полотенцами до тех пор, пока он не переписывает эту чертову штуку) - это изменить байт-код библиотеки.
Симпатичный подход - использовать AspectJ с ткачеством времени загрузкикогда вы загружаете библиотеку, уродливым вариантом является использование инструмента, например asm, для удаления или изменения вызова метода.
Вот аспект AspectJ, который отклоняет вызовы на System.exit()
:
public aspect SystemExitEvader{
pointcut systemExitCall() : call(* java.lang.System.exit(*));
void around() : systemExitCall(){
System.out.println("Call to System.exit() attempted");
// note: there is no call to proceed()
}
}
ОК, я видел другие ответы о SecurityManager'е, и я согласен, что это, вероятно, правильный путь, но я оставлю здесь свой ответ в качестве альтернативы.