Кажется, проблема в загрузчике классов, который используется, когда sbt загружает ваш код. ObjectInputStream описывает его стандартное разрешение загрузчика классов, которое обходит стек. Обычно это заканчивается тем, что мы находим загрузчик, связанный с программой, но в этом случае он использует неправильный.
Мне удалось обойти эту проблему, включив в свой код следующий класс и используя его вместо ObjectInputStream напрямую.
package engine;
import java.io.InputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
class LocalInputStream extends ObjectInputStream {
LocalInputStream(InputStream in) throws IOException {
super(in);
}
@Override
protected Class<?> resolveClass(ObjectStreamClass desc)
throws ClassNotFoundException
{
return Class.forName(desc.getName(), false,
this.getClass().getClassLoader());
}
}
Это переопределяет метод resolClass и всегда использует метод, связанный с этим конкретным классом. Пока этот класс является частью вашего приложения, это должно работать.
Кстати, это и быстрее, чем необходимость в форке, но также работает с платформой Play, которая в настоящее время не поддерживает разветвление в режиме разработки.