BaseKernel.eval(..) should not declare a checked exception. It should throw some kind of RuntimeException instead. This will allow the extension classes to cut down the exception handling boilerplate:
public class DFLibJupyterExtension implements Extension {
...
@Override
public void install(BaseKernel kernel) {
try {
kernel.eval(...);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}