I'm trying to write a user-defined function for KSQL in Clojure. KSQL wants you to give it an uberjar with an annotated java class. I've tried this with both gen-class and a hand-authored java file that interops to Clojure. In both cases, the uberjar gets loaded fine, and my class annotations are detected via reflection. But I get exceptions like "java.lang.ExceptionInInitializerError" and "java.lang.NoClassDefFoundError: Could not initialize class clojure.java.api.Clojure" as soon as anything to do with clojure is executed, like Clojure.var("clojure.core", "require") Feels like I must be missing something about how the uberjar needs to be built. Or perhaps this is a classloader issue. KSQL apparently does some kind of classpath isolation to keep user-defined functions from stepping on each other.